JS有什么好的处理字符串固定位置加入<br />,就是将一段文本实行自动换行

如题,求好点的写法
一定要支持中文的,关键是js 自带的substr不好用,例如 "1235467".substr(0,5)=12345,实际长度也是5,"中文中文中文中".substr(0,5)=中文中文中,实际长度是10,这就不行了,求指导~

$(function(){
var str = "12345一二三四五";
var str1 = str.subCHStr(0, 11);
var str2 = str.subCHString(0, 14);
console.log(str1 + " == " + str2);
});

//计算字符串长度
String.prototype.strLen = function() {
var len = 0;
for (var i = 0; i < this.length; i++) {
if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0) len += 2; else len ++;
}
return len;
};
//将字符串拆成字符,并存到数组中
String.prototype.strToChars = function(){
var chars = [];
for (var i = 0; i < this.length; i++){
chars[i] = [this.substr(i, 1), this.isCHS(i)];
}
String.prototype.charsArray = chars;
return chars;
};
//判断某个字符是否是汉字
String.prototype.isCHS = function(i){
if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0)
return true;
else
return false;
};
//截取字符串(从start字节到end字节)
String.prototype.subCHString = function(start, end){
var len = 0;
var str = "";
this.strToChars();
for (var i = 0; i < this.length; i++) {
if(this.charsArray[i][1])
len += 2;
else
len++;
if (end < len)
return str;
else if (start < len)
str += this.charsArray[i][0];
}
return str;
};
//截取字符串(从start字节截取length个字节)
String.prototype.subCHStr = function(start, length){
return this.subCHString(start, start + length);
};

//不是原创,来源cnblogs, 但是百度不照顾版权不让放原始链接
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2018-05-10
css换行能符合你要求不?
<div style="width:200px;word-wrap: break-word; word-break: normal;">内容</div>
这样内容超长后会自动换行。追问

真不行。。。因为是JS动态给区域内容的,自动换行不给力啊

追答

纯文本内容的话css换行效果应当都还可以吧。
能想到的另一个方法就是程序中读取指定字符数然后加,这样要考虑中英文及其他字符问题比较麻烦。

追问

就是想用JS或jquery在固定位置加入,看看你们有什么好方法的

追答

1、得出你放内容的容器一行能放多少个英文字符len
2、读取源字符串并判断每个字符串是中文还是英文,中文占两个英文宽度,并把宽度加起来直到
没考虑其他国家文字和特殊符号,这样性能好低。暂时没想到其他办法。

弄了个测试了下,你可以用下看看效果。
function formatStr(len,str){//len即为你容器一行最多能放多少个英文字符
var l = str.match(/[^ -~]/g) == null ? str.length : str.length + str.match(/[^ -~]/g).length;
if(l 4) {
t_len+=2;
c_len=2;
}else t_len++;
if(t_len==len){
newStr+=(c+"");
t_len=0;
c_len=0;
}else if(t_len>len){
newStr+=(""+c);
t_len=c_len;
}else newStr+=c;
}
return newStr;
}
function test(){
var str="dddsf s f fsdf dfdssfffdsf s 两节课46546";
var arr=str.split(/[]|[]|[]|[]/g);
var nstr="";
for(var i=0;i]|[");
}
var mydiv=document.getElementById("mydiv");
mydiv.innerHTML="";
mydiv.innerHTML=nstr;
}

本回答被提问者和网友采纳
第2个回答  2012-03-05
把DIV的宽度定死横向不滚动,竖向滚动。试试
第3个回答  2012-03-06
直接用css控制换行就对了 不需要什么都用程序控制吧
第4个回答  2012-03-06
去数个数吧,把一个汉字当成是两个英文的来数.

JS有什么好的处理字符串固定位置加入,就是将一段文本实行自动换行_百度...
\/\/判断某个字符是否是汉字 String.prototype.isCHS = function(i){ if (this.charCodeAt(i) > 255 || this.charCodeAt(i) < 0)return true;else return false;};\/\/截取字符串(从start字节到end字节)String.prototype.subCHString = function(start, end){ var len = 0;var str = "";th...

js回车换行?
textarea本身就有这个功能,设其宽度恰能容纳20个字符,然后将其wrod-warp=true属性加上就是自动换行,如果不是这样,才会求JS的帮助的。既然是自动换行,当然不会有换行符存在。想把自动换行的地方加上换行符的话,必须用另外的语句来处理。如果是按回车键产生的换行。用默认值就可以提交换行符的。再...

用js实现在textarea中每输入15个字符串自动换行 输入汉字超过15个就去...
(""textarea).bind('input propertychange', function () { var len = $(this).val().length;if(len % 15 == 0){ \/\/添加换行符逻辑 } });

VB 文本框自动换行
如果需要按照你写的这个字符串 可以由两种办法 一个是每个字符每隔字符的判断 如果是小数点则在它的两位以前加VBCRLF(第一个小数点不用)或者是按每隔字符的ASCII码,当字符为数字时 在前一位后加VBCRLF 当然这两个的前提都是textbox的MutiLine属性为true ...

网页关键字用什么隔开网站关键词用什么隔开
对于一些非GIF和JPEC格式的图片,FrontPage可以自动地将这些文件转换成GIF或JPEG格式。 2.在网页中插入水平线 水平线可以在网页上清晰地划分界限,而且对用户网页的布局起着重要的作用。添加一条水平线,可以通过“插入”菜单中选择“水平线”命令添加。在默认状态下水平线是灰色的,用户可以像改变文本颜色一样改变水平线...

linux的文本编辑器有哪些linux的文本编辑器
EditPlus是一款小巧但是功能强大的可处理文本、HTML和程序语言的Windows编辑器,你甚至可以通过设置用户工具将其作为C,Java,Php等等语言的一个简单的IDE。拥有无限制的撤消与重做、英文拼字检查、自动换行、列数标记、搜寻取代、同时编辑多文件、全屏幕浏览功能。而它还有一个好用的功能,就是它有监视剪贴板的功能,同步...

相似回答