gpt4 book ai didi

javascript - 如何将所有 text_node nodeValue 的一部分包装在 html 元素中?

转载 作者:太空狗 更新时间:2023-10-29 16:34:55 26 4
gpt4 key购买 nike

我正在遍历 html 文档中的所有文本节点,以便用特定范围包围一些单词。

更改 nodeValue 不允许我插入 html。 span 被转义为以纯文本显示,我不希望这样。

这是我目前所拥有的:

var elements = document.getElementsByTagName('*');

for (var i = 0; i < elements.length; i++) {
var element = elements[i];

for (var j = 0; j < element.childNodes.length; j++) {
var node = element.childNodes[j];

if (node.nodeType === Node.TEXT_NODE) {
node.nodeValue = node.nodeValue.replace(/Questions/, "<span>Questions</span>");
}
}
}
<p>Questions1</p>
<p>Questions 2</p>
<p>Questions 3</p>
<p>Questions 4</p>

最佳答案

我认为您需要递归所有 DOM 和每个匹配项...请看这里:

function replacer(node, parent) { 
var r = /Questions/g;
var result = r.exec(node.nodeValue);
if(!result) { return; }

var newNode = this.createElement('span');

newNode.innerHTML = node
.nodeValue
.replace(r, '<span class="replaced">$&</span>')
;

parent.replaceChild(newNode, node);
}


document.addEventListener('DOMContentLoaded', () => {
function textNodesIterator(e, cb) {
if (e.childNodes.length) {
return Array
.prototype
.forEach
.call(e.childNodes, i => textNodesIterator(i, cb))
;
}

if (e.nodeType == Node.TEXT_NODE && e.nodeValue) {
cb.call(document, e, e.parentNode);
}
}

document
.getElementById('highlight')
.onclick = () => textNodesIterator(
document.body, replacer
);
});
.replaced {background: yellow; }
.replaced .replaced {background: lightseagreen; }
.replaced .replaced .replaced {background: lightcoral; }
<button id="highlight">Highlight</button>
<hr>
<p>Questions1</p>
<p>Questions 2</p>
<p>Questions 3</p>
<p>Questions 4</p>
<p>Questions 5 Questions 6</p>
<div>
<h1>Nesting</h1>
Questions <strong>Questions 4</strong>
<div> Questions <strong>Questions 4</strong></div>


<div>
Questions <strong>Questions 4</strong>

<div> Questions <strong>Questions 4</strong></div>
</div>
</div>

关于javascript - 如何将所有 text_node nodeValue 的一部分包装在 html 元素中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38801525/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com