【发布时间】:2014-04-03 11:26:13
【问题描述】:
我想使用 TreeWalker 在文本节点中插入 html 标记,但 TreeWalker 将我的 html 括号强制放入 & lt; >不管我试过什么。代码如下:
var text;
var tree = document.createTreeWalker(document.body,NodeFilter.SHOW_TEXT);
while (tree.nextNode()) {
text = tree.currentNode.nodeValue;
text = text.replace(/(\W)(\w+)/g, '$1<element onmouseover="sendWord(\'$2\')">$2</element>');
text = text.replace(/^(\w+)/, '<element onmouseover="sendWord(\'$1\')">$1</element>');
tree.currentNode.nodeValue = text;
}
使用 \
var text;
var newHTML = "";
var tree = document.createTreeWalker(document.body);
while (tree.nextNode()) {
text = tree.currentNode.nodeValue;
if (tree.currentNode.nodeType == 3){
text = text.replace(/(\W)(\w+)/g, '$1<element onmouseover="sendWord(\'$2\')">$2</element>');
text = text.replace(/^(\w+)/, '<element onmouseover="sendWord(\'$1\')">$1</element>');
}
newHTML += text
}
document.body.innerHTML = newHTML;
编辑:我意识到更好的解决方法是自定义标记文本节点((Customtag_Start_Here)等),将整个 DOM 复制到字符串,并使用我的自定义标记来识别文本节点并以这种方式修改它们。但如果我不必这样做,我宁愿不要。
【问题讨论】:
-
您不能在文本节点中注入 HTML...
-
我可以告诉文本节点它不想再成为文本节点了吗(即告诉它有很多文本节点子节点)?
-
@e2r2i2k2 不可以。可以替换,可以拆分,但不能更改。
-
请注意,如果您在行走过程中创建新的文本节点,那么您也会行走并访问它们。根据我的回答,最简单的方法是收集所有文本节点然后遍历它们。
标签: javascript html dom textnode