var txt = 'abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz'; var txt2='我爱模板网我爱模板网' alert(txt.substr(0,10)) alert(txt2.substr(0,10))虽然都是截取是个字符,但是你会发现中文的长度远超英文(这里的长度是指宽度),这在验证表单没有太大影响,但是在css界面布局时,就有影响了,可能同样是截取10个字符,中文的话截取后会占用两行,而英文可能一行都没沾满。这是因为一个中文宽度占了两个英文。所以,实际上,上面的代码,应为应该写20,才可能差不多。
使用下面的代码,遍历要截取的字符串,发现是英文,就把它长度加一就可以解决上面的问题了:
function cutTxt(txt, len, showDot){ //让字母和汉字统一长度 for (var i = 0; i < txt.length; i++){ var son_char = txt.charAt(i); if(encodeURI(son_char).length < 3){ //英文encodeURI一般长度1~3,汉字encodeURI一般长度是 9 len += 1; //英文占一位字符,中文占两位字符,所以英文要加一 一个汉字相当于2个字符 } } if(txt.length>len){ if(showDot){ txt = txt.substr(0,len)+'...'; }else{ txt = txt.substr(0,len); } } return txt; }参数:
txt:string 要截取的字符串
len:number 要截取的长度
showDot:boolean 截取后,是否显示点点点(不超过截取长度传了也不会显示)