gpt4 book ai didi

JavaScript:在 textNode 中添加元素

转载 作者:技术小花猫 更新时间:2023-10-29 12:38:57 28 4
gpt4 key购买 nike

我想向文本节点添加一个元素。例如:我有一个在元素的文本节点中搜索字符串的函数。当我找到它时,我想用 HTML 元素替换它。有一些标准吗?谢谢。

最佳答案

您不能只替换字符串,您必须替换整个 TextNode 元素,因为 TextNode elements can't contain child elements在 DOM 中。

因此,当您找到文本节点时,生成替换元素,然后用类似于以下的函数替换文本节点:

function ReplaceNode(textNode, eNode) {
var pNode = textNode.parentNode;
pNode.replaceChild(textNode, eNode);
}

对于您想要执行的操作,您必须将当前文本节点拆分为两个新的文本节点和一个新的 HTML 元素。下面是一些示例代码,希望能为您指明正确的方向:

function DecorateText(str) {
var e = document.createElement("span");
e.style.color = "#ff0000";
e.appendChild(document.createTextNode(str));
return e;
}

function SearchAndReplaceElement(elem) {
for(var i = elem.childNodes.length; i--;) {
var childNode = elem.childNodes[i];
if(childNode.nodeType == 3) { // 3 => a Text Node
var strSrc = childNode.nodeValue; // for Text Nodes, the nodeValue property contains the text
var strSearch = "Special String";
var pos = strSrc.indexOf(strSearch);

if(pos >= 0) {
var fragment = document.createDocumentFragment();

if(pos > 0)
fragment.appendChild(document.createTextNode(strSrc.substr(0, pos)));

fragment.appendChild(DecorateText(strSearch));

if((pos + strSearch.length + 1) < strSrc.length)
fragment.appendChild(document.createTextNode(strSrc.substr(pos + strSearch.length + 1)));

elem.replaceChild(fragment, childNode);
}
}
}
}

也许 jQuery 会让这更容易,但理解为什么所有这些东西都以它的方式工作是很好的。

关于JavaScript:在 textNode 中添加元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3963872/

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