只能处理比较短的文字。可以先把字符串按每一行的长度截取下来,再到行首加一个空白字符,这样就不会因为标点符号在前面而强制换行了,因为行首都有一个空白字符,而空白字符是可以当行首的。
下面贴一下我用的截取字符串的方法
function cutStr(str,L){ var result = '', strlen = str.length, // 字符串长度 chrlen = str.replace(/[^x00-xff]/g,'**').length; // 字节长度 if(chrlen<=L){return str;} for(var i=0,j=0;i<strlen;i++){ var chr = str.charAt(i); if(/[x00-xff]/.test(chr)){ j++; // ascii码为0-255,一个字符就是一个字节的长度 }else{ j+=2; // ascii码为0-255以外,一个字符就是两个字节的长度 } if(j<=L){ // 当加上当前字符以后,如果总字节长度小于等于L,则将当前字符真实的+在result后 result += chr; }else{ // 反之则说明result已经是不拆分字符的情况下最接近L的值了,直接返回 return result; } } }
也就不依赖自动换行了,而是直接向测出一行要多长,直接自己先截取字符串,后面在每个直接截取字符串的前面加一个空格,空格是可以用于开头的,这样就不会因为标点不好不能出现在开头而提前换行了