只能處理比較短的文字。可以先把字符串按每一行的長度截取下來,再到行首加一個空白字符,這樣就不會因為標點符號在前面而強制換行了,因為行首都有一個空白字符,而空白字符是可以當行首的。
下面貼一下我用的截取字符串的方法
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; } } }
也就不依賴自動換行了,而是直接向測出一行要多長,直接自己先截取字符串,后面在每個直接截取字符串的前面加一個空格,空格是可以用於開頭的,這樣就不會因為標點不好不能出現在開頭而提前換行了