梦秋雨 发表于 2013-1-27 04:43:22

长标题显示字数处理

很多情况下,我们需要控制长标题的显示字数。在客户端用JavaScript控制显示最大字数后,由于js把任何字符都当作1个长度来处理,由此导致全角和半角字符显示的实际长度不同。

例如我们设置某个文章列表页面所有的文章标题最长显示10个字符。那么如下的题目:

这篇文章是测试标题长度显示的文章

I love my country.I love all of you.

处理后,将分别显示为:

这篇文章是测试标题长

I love my (注意最后还有一个空格)

假设我们是按照中文的宽度来确定10个字符这个标准的,那么当标题是英文等半角字符时,显然太短了。反过来,如果我们按照英文等半角字符来确定显示字符数量标准,那么如果题目是中文的时候,又很容易出现自动换行等我们不希望出现的结果。

本文尝试以一种笨拙的办法处理这个问题。即使用js检查字符串中的每一个字符,如果发现有两个(注意不一定相连)的半角字符,那么就将显示长度标准加1。

<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee;"> 1     /**
 2         获取最终显示的字符串
 3 
 4         @param str 要显示的完整字符串
 5         @param baseLength 全是全角字符情况下的显示长度
 6     */
 7     function getShowStr(str,baseLength)
 8     {
 9         return str.substring(0,getShowLength(str,baseLength));
10     }
11     /**
12         计算最终显示长度
13 
14         @param str 要显示的完整字符串
15         @param baseLength 全是全角字符情况下的显示长度
16     */
17     function getShowLength(str,baseLength)
18     {
19         var i;
20         var result;
21         var state = false; //这个做一个状态标志,实现每出现2个半角字符,让显示长度加1
22 <span style="color: #008000;" />
23         result = baseLength;
24 
25         for(i = 0 ;i < str.length;i++)
26         {
27             if(i==baseLength-1)break;
28 
29             if((str.charAt(i) >= 'a' && str.charAt(i) <= 'z')
30                 ||(str.charAt(i) >= 'A' && str.charAt(i) <= 'Z')
31                 ||(str.charAt(i) >= '0' && str.charAt(i) <= '9')
32                 ||count(str.charAt(i)))
33             {
34                 if(state)
35                 {
36                     state = false;
37                     result ++;
38                 }
39                 else
40                     state = true;
41             }
42         }
43 
44         return result;
45     }
46 
47     /**
48         判断一个字符是否是如下半角符号
49 
50         最笨的就是这里。而且应该不全,我是从键盘上一个一个键按过来的。呵呵
51 
52         @param c 要检测的字符
53     */
54     function count(c)
55     {
56         if (c == '`'
57           ||c == '!'
58           ||c == '@'
59           ||c == '#'
60           ||c == '$'
61           ||c == '%'
62           ||c == '^'
63           ||c == '&'
64           ||c == '*'
65           ||c == '('
66           ||c == ')'
67           ||c == '_'
68           ||c == '-'
69           ||c == '+'
70           ||c == '='
71           ||c == '['
72           ||c == '{'
73           ||c == ']'
74           ||c == '}'
75           ||c == '\\'
76           ||c == '|'
77           ||c == ';'
78           ||c == ':'
79           ||c == '"'
80           ||c == '\''
81           ||c == '<'
82           ||c == ','
83           ||c == '>'
84           ||c == '.'
85           ||c == '?'
86           ||c == '/'
87           ||c == ' ')
88             return true;
89         else
90             return false;
91     }
页: [1]
查看完整版本: 长标题显示字数处理