Javascript split()搞砸了我的html标签

时间:2013-10-08 09:45:24

标签: javascript jquery regex string split

我有一个2500字的字符串,我需要将其放在不同的DIV中。我使用text = text.split(' ')函数检索每个单词,然后填充DIVs,直到DIV.scrollHeight高于DIV.offsetHeight,然后转到下一个DIV

我遇到的问题是我的2500字符串中的HTML标签完全搞砸了: 它会关闭我不应该显示的<b>标记,不显示</b>它应该显示的位置,不显示此标记的<font部分,不会显示{ {1}}等等。

知道为什么吗?

非常感谢!

编辑:根据要求,这是整个jQuery代码。请原谅我的任何错误:)

</font>

3 个答案:

答案 0 :(得分:1)

我认为问题可能是您可能会拆分标签,然后浏览器会尝试解决这个问题。

使用算法,您可能会得到类似的结果:

<div>
    <p>The text starts here
</div>
<div>
    and ends here</p>
</div>

这显然不是最好的事情。我认为你应该跟踪开/关标签,只有当它们全部关闭时才更改容器div

答案 1 :(得分:1)

我已经解决了这个问题。 我使用以下正则表达式来捕获单词和HTML标记,并使用以下.replace()在我<br/>之后添加空格(这是问题的根源)。

var texte = texte.replace(/<br>/g, '<br/> ');

var TABLEAU = texte.match(/<\s*(\w+\b)(?:(?!<\s*\/\s*\1\b)[\s\S])*<\s*\/\s*\1\s*>|\S+/gi);

这就是诀窍。

全部谢谢!

答案 2 :(得分:1)

如果您想将标记内容视为单个单词,可以尝试使用

而不是var TABLEAU = texte.split(' ');
var nodes = $('<div/>',{ html: texte }).contents();
var TABLEAU = nodes.map(function(){
    return this.nodeType === 3 ? $(this).text().split(' ') : this;
}).get();
相关问题