首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript:在textNode中添加元素

JavaScript:在textNode中添加元素
EN

Stack Overflow用户
提问于 2010-10-19 06:21:19
回答 1查看 6.5K关注 0票数 12

我想向textNode添加一个元素。例如:我有一个在元素的textNode中搜索字符串的函数。当我找到它时,我想用一个HTML元素替换它。对此有什么标准吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2010-10-19 06:28:10

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

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

代码语言:javascript
复制
function ReplaceNode(textNode, eNode) {
    var pNode = textNode.parentNode;
    pNode.replaceChild(textNode, eNode);
}

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

代码语言:javascript
复制
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可以让这件事变得更容易,但理解为什么所有这些东西都是这样工作的是很好的。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3963872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档