javascript - 删除标记名内字符串的一部分(通过js)

标签 javascript regex string dom

我有这个节点: <p>text.. <span>hi</span><a>bye</a> more text..</p>

我想获取仅包含直接文本的元素内容,内部没有任何标签(a 和 span,在上面的示例中),就像我得到: <p>text.. more text..</p> .

您能告诉我如何通过特定的正则表达式来做到这一点吗?

非常感谢!

最佳答案

我建议您只需删除任何 ChildNode有一个 nodeType 3 (TEXT_NODE) 除外。 (fiddle):

(function(){
    var p = document.querySelector("p");
    var ln = p.childNodes.length;
    while (ln--){
        if(p.childNodes[ln].nodeType !== 3) { // not a text node   
            p.removeChild(p.childNodes[ln]);
        }
    }    
})();

这给你留下了这个:

<p>text..  more text..</p>

或者,您可以从文本节点构建一个字符串并设置 p.textContent ( fiddle ),即:

(function () {
    var p = document.querySelector("p");
    p.textContent = [].reduce.call(p.childNodes, function (p, c) {
        c.nodeType === 3 && p.push(c.data);
        return p;
    }, []).join("");
})();

另请参阅 Node.childNodesNode.removeChild() .

注意:请不要使用正则表达式来解析 html。请参阅this answer .

关于javascript - 删除标记名内字符串的一部分(通过js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472054/

相关文章:

javascript - 弹窗不触发 chrome.tabs.create 的回调?

javascript - 验证需要匹配特定条件(正则表达式)的字符串?

r - 导出多个匹配模式

java - 传递 3 个元素( Intent )

c++ - 取一串字母并将它们放入数组中

javascript - 在 "Fri May 10 2019 00:00:00 GMT+0800"中添加一天,并使用 JavaScript 以相同的格式获得最终答案

javascript - jQuery 中的 attr() 是否强制小写?

javascript - jquery中图像之间的间隔

C#/.NET 等同于 Java 的 Matcher.matches() 和 Matcher.lookingAt()

java - parseDouble 与 nextDouble