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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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, 但是百度不照顾版权不让放原始链接
参考技术A 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;

本回答被提问者和网友采纳
参考技术B 把DIV的宽度定死横向不滚动,竖向滚动。试试 参考技术C 直接用css控制换行就对了 不需要什么都用程序控制吧 参考技术D 去数个数吧,把一个汉字当成是两个英文的来数.

以上是关于JS有啥好的处理字符串固定位置加入<br />,就是将一段文本实行自动换行的主要内容,如果未能解决你的问题,请参考以下文章

不处理 C# 方法的返回值可以吗?这个例子中有啥好的做法?

首先有啥好的算法可以捕捉到像样的图像?之后是预处理/图像清洁,最后是 OCR 程序?

想学习HTML5,有啥好的书籍推荐吗?

java有啥好的gui框架知乎

检测 pandas.DataFrame 中的列是不是是分类的有啥好的启发式方法?

从事件中返回一个值——这有啥好的做法吗?