是为了对上一篇“区别中英文截取字符”做个补充纠正,其中有一点,我是概念上混淆了,一个UTF-8中文字确实是占了3个字节,但是字符宽度还是2个字符宽度,所以造成了UTF-8下,截取相同数量的字符,但是宽度却不相同,更正后的代码还是有一定的局限性,就是要用等宽字体“如宋体,sans-serif”,但是如果你定义成了非等宽字体就不适用了如“Arial”,举个最简单的例子“a”,”w”这两个字母定义成“Arial”的时候,它们的宽度是不相等的。希望大家能提供更好的思路来解决这个问题,fixtext插件代码如下:
(function(){
$.fn.fixtext=function(options){
var defaults={
ellipsis:true,
maxLen:"15"
}
var options = $.extend(defaults, options);
this.each(function(){
var fixobj=$(this);
var currentStr="";
var text=$(fixobj).html();
var textlen=text.length;
//判断是否保留省略号
options.maxLen=(options.ellipsis)?options.maxLen-4:options.maxLen;
for(var i=0,len=textlen;i<len; i++){
currentStr+=text.charAt(i);
if(getCharLength(currentStr)>options.maxLen){
//不保留里省略号的文字内容
text2=text.substr(0,i);
//保留里省略号的文字内容
if(options.ellipsis){text2=text2+"……"}
$(fixobj).html(text2);
return;
}
else{
$(fixobj).html(currentStr);
}
}
//计算截取字符的长度
function getCharLength(str){
var charLen=0;
for (var i=0,len=str.length; i<len; i++){
if(str.charCodeAt(i)>255){
charLen+=2;
}
else{
charLen+=1
}
}
return charLen;
}
})
}
})(jQuery)
Demo : http://www.rainboys.cn/demo/fixtext.html
插件下载地址:http://www.rainboys.cn/demo/js/fixtext.js


