Javascript 如何每隔n个非';两个特定文本之间的t?
我已经准备好将html插入dom。在此之前,我需要每隔30个字符插入一个标记。这样做很容易:Javascript 如何每隔n个非';两个特定文本之间的t?,javascript,html,regex,Javascript,Html,Regex,我已经准备好将html插入dom。在此之前,我需要每隔30个字符插入一个标记。这样做很容易: var html = html.replace(/(.{30})/g, '$1<wbr>'); var html=html.replace(/({30})/g,'$1'); 然而,这个简单的解决方案常常会将标签插入到现有的html标签中。例如,这最终可能会发生: <spa<wbr>n> Some text here </span> 这里有一些文本
var html = html.replace(/(.{30})/g, '$1<wbr>');
var html=html.replace(/({30})/g,'$1');
然而,这个简单的解决方案常常会将标签插入到现有的html标签中。例如,这最终可能会发生:
<spa<wbr>n> Some text here </span>
这里有一些文本
html可能有很多子级,如下所示:
<div>
This is some text that we need to treat. <br />
<span> Here is some more text. <a href="#"> Click here. </a> </span>
</div>
这是我们需要处理的一些文本
这里有更多的文本。
最好的方法是什么?正则表达式是一种可能的解决方案吗?还是我需要编写一个javascript函数?我希望我能想出如何编写一个与上面类似的正则表达式,它每n个字符插入一个文本,除非它位于字符“”之间
非常感谢您的帮助。您可以使用:
(.{30}.*?\s)
工作正则表达式示例:
Javascript:
var html = html.replace(/(.{30}.*?\s)/g, '$1<br />');
var html=html.replace(/(.{30}.*.\s)/g,'$1
');
因此,这将在第30个字符后的下一个空格中插入
标记,因此
不会插入任何单词或标记中。这是我的解决方案。通常我不想使用jquery,但时间是关键
var el = $('<div>' + html + '</div>');
var allChildren = el.find('*');
allChildren.each(function() {
for(var i = 0, len = this.childNodes.length; i < len; i++) {
if(this.childNodes[i].nodeType === 3) {
var newHtml = this.childNodes[i].nodeValue.replace(/(.{30})/g, '$1<wbr>');
$(this.childNodes[i]).replaceWith(newHtml);
}
}
});
html = el.html();
var el=$(''+html+'');
var allChildren=el.find('*');
allChildren.each(function(){
for(var i=0,len=this.childNodes.length;i
不要替换HTML字符串中的。只需在DOM树的所有文本节点上递归,并将它们拆分。您面临的问题是什么?难道不应该有一个CSS解决方案吗?@Bergi,我正在编写一个递归方法,但我真的希望一两行就可以完成。word-wrap:break word很好,但CSS是不可能的unfortunately@Tyler,世界上谁在浏览链接?除非,你知道,有内部html。那么它不是每30个字符。