首页 > 建站教程 > JS、jQ、TS >  js截取等长的英文和中文字符串正文

js截取等长的英文和中文字符串

    js截取字符串最常用的两个方法:substr(start,length)和substring(start,end)。在截取字符串的时候,给个个数或者位置就行了。但是,英文和中文截取出来,长度相差太多,如下:
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 截取后,是否显示点点点(不超过截取长度传了也不会显示)