大家有沒有遇到過一個問題,就是一個列表,或是一段文字過多時,截取多余的部分用省略號,好吧,證明你實力的時候到了,我下面先分解一下方法,再用插件寫出來,首先我們說的是,用到的第一個方法,就是判斷一個字符串 多少個字節。
function lengthB(str){var num=0,len =str.length;if(len){for(i =0; i<len;i++){if(str.charCodeAt(i)>255){num+=2;}else{num+=1; }}}else{return 0;}return num; }
lengthB,這個方法,是返回str的字節數,charCodeAt(i),返回字符的ascii碼值,>255,為中文,就是2個字節,否則,為英文一個字節。
測試看看
var num =lengthB("test多少個字節"); alert(num);
第二個重點來了,傳入參數,str(被截取的字符串),length(定寬的寬度),最后返回截取的截取的字符串。
function substringB(str , length){var temp="",num=0;_len = lengthB(str);if(_len){if(_len<length){return str;}else{for(var i =0; i<length; i++){if(num>=length){break;}if(str.charCodeAt(i)>255){num+=2;temp+=str.charAt(i);}else{num+=1;temp+=str.charAt(i);}}return temp;}}else{return null;}}
第三步:終極方法,相比第二個方法,多了第三個參數,默認是“...”
function fixedWidth(str,length,char){var str = str.toString();if(!char){var char ="..."} var num = length - lengthB(str);if(num<0){str = substringB(str,length-lengthB(char))+char;}return str; }
注意,返回的str,要把char的字節數減掉哦。
下面來封裝一下插件哦,這里我做的是全局的,(大家試下jquery對象打方法封裝插件。下節我再公布)
(function($){$.extend($,{fixedWidth :function(str,length,char){var str = str.toString();if(!char){var char ="..."} var num = length - lengthB(str);if(num<0){str = substringB(str,length-lengthB(char))+char;}return str;function lengthB(str){var num=0,len =str.length;if(len){for(i =0; i<len;i++){if(str.charCodeAt(i)>255){num+=2;}else{num+=1; }}}else{return 0;}return num;}function substringB(str , length){var temp="",num=0;_len = lengthB(str);if(_len){if(_len<length){return str;}else{for(var i =0; i<length; i++){if(num>=length){break;}if(str.charCodeAt(i)>255){num+=2;temp+=str.charAt(i);}else{num+=1;temp+=str.charAt(i);}}return temp;}}else{return null;}}}}); })(jQuery);
調用:
$(function(){var str1 = jQuery.fixedWidth("ddddddfagfa",7);alert(str1); });
?