我有一个页面将html实体中的文本显示在div
节点中,如下所示:
<p>isdjf</p>osdf&kdjf;'ldsf."jdof&ids
想在js中将其截断为10个字母长度,但是想避免破坏html实体,如何正确实现? substr
?
html实体中断如下:
var str = '0123456>abc';
console.log( str.substr(0,10) ); // -> "0123456&#x"
你看到了问题吗?
答案 0 :(得分:2)
function truncate(enitityEncodedString){
var string, count, pos;
string = '';
count = 0;
while(count <= 10){
if(enitityEncodedString.search(/&#.{2,3};/) === 0){
pos = enitityEncodedString.indexOf(';') + 1;
string += enitityEncodedString.substr(0, pos);
enitityEncodedString = enitityEncodedString.substr(pos);
}else{
string += enitityEncodedString[0];
enitityEncodedString = enitityEncodedString.substr(1);
}
count++;
}
return string;
}
检查编码字符串开头的html实体。如果是这样,将html实体连接到返回字符串(我使用.indexOf()来获取html实体的长度,假设第一个分号表示同一个html实体的结尾)。否则,只需将第一个字符添加到返回字符串即可。重复,直到你有10个字符。
也许不是最漂亮的方式,但它有效。