六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 68|回复: 0

长标题显示字数处理

[复制链接]

升级  3.33%

13

主题

13

主题

13

主题

秀才

Rank: 2

积分
55
 楼主| 发表于 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           ||== '!'
58           ||== '@'
59           ||== '#'
60           ||== '$'
61           ||== '%'
62           ||== '^'
63           ||== '&'
64           ||== '*'
65           ||== '('
66           ||== ')'
67           ||== '_'
68           ||== '-'
69           ||== '+'
70           ||== '='
71           ||== '['
72           ||== '{'
73           ||== ']'
74           ||== '}'
75           ||== '\\'
76           ||== '|'
77           ||== ';'
78           ||== ':'
79           ||== '"'
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     }
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表