在我正在处理的当前项目中,我将某些文本节点拆分为多个节点,以便我可以跟踪它们。我将这些节点存储在某个地方的全局对象中,但出于某种原因,它们会在我需要它们和解析它们之间的某个时间保持规范化。奇怪的是,这不会立即发生,但我无法弄清楚如何防止它......
示例:
<p>
foo
bar
**HELLO**
</p>
在上面的示例中,有一个文本节点:"foo\n bar\n **HELLO**"
。我想将此节点拆分为三个单独的文本节点,同时跟踪最后一个节点。
但是,在创建新文本节点,填充它,然后将其附加到其“父(<p>
)之后,它会在我追加它后不久进行规范化。”
我需要防止它正常化。
修改
一个简单的代码示例是使用以下内容:
var pElem = document.querySelector('p'),
textNode = pElem.childNodes[0],
newNodes = textNode.nodeValue.split(/\s+/g).reverse().map(function(i,v){
return document.createTextNode(v);
}),
curNode = textNode;
textNode.nodeValue = newNodes[0].nodeValue;
for(var x=1;x<newNodes.length;x++) {
curNode.parentNode.insertBefore(curNode, newNodes[x]);
curNode = newNodes[x]
}
var lastNode = newNodes[0]; // THIS is what I need to keep track of
我没有测试这段代码;只是把它掀起来基本上,一段时间后它们都合并为一个文本节点(a.k.a。,“normalize”)。
没有其他代码可能正在执行Node.normalize()
。这发生在一个独立的测试页面中,其中没有引入其他代码(如 none ;没有其他库,polyfill等)。
希望这有助于家伙!