考虑我的三部分代码
<div>
Lorem Ispum dolor sit <span class='highlightYellow'>Amet </span>
<br />Lorem Ispum <span class='highlightYellow'>dolor</span> sit Amet
</div>
<div>
Lorem Ispum dolor sit <span class='highlightYellow'>Amet </span>
Lorem Ispum <span class='highlightYellow'>dolor</span> sit Amet
<br />
</div>
<div>
Lorem Ispum dolor sit <span class='highlightYellow'>Amet </span>
Lorem Ispum <span class='highlightYellow'>dolor</span> sit Amet
</div>
和一个按钮
<button>Unwrap text from .hightlightYellow elements</button>
我使用此方法解包
$(".highlightYellow").contents().unwrap();
当由于<div>
标记而看到$('div')[i].childNodes
之类的<br/>
之类的子节点时,div中的内容将成为多个连续的文本节点。两个texnode如何一个接一个地来?这真的不可能。但它来了。
在第三个<div>
中,没有<br/>
标记。所以它工作正常。我猜测<br/>
标记只会导致此问题。或者还有其他方法可以解决这个问题吗?
以下是Fiddle,您可以通过检查元素
来查看问题答案 0 :(得分:2)
http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1312295772
当文档首次通过DOM提供时,只有一个 每个文本块的文本节点。 用户可以创建相邻的Text节点 代表给定元素的内容而没有任何干预 标记,但应该意识到没有办法代表 这些节点之间用XML或HTML分隔,因此它们不会(在 general)在DOM编辑会话之间保持不变。 normalize()方法 on Element将任何此类相邻的Text对象合并到一个节点中 对于每个文本块;在使用之前建议这样做 依赖于特定文档结构的操作,例如 使用XPointers进行导航。
$('div').each(function(i, element) {
element.normalize();
//The normalize() method removes empty Text nodes, and joins adjacent Text nodes.
});