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

时间:2014-08-24 13:10:35

标签: javascript regex string dom

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

我想仅使用直接文本获取元素内容,而不在内部使用任何标记(在上面的示例中为a和span),就像我得到的那样:<p>text.. more text..</p>

你能告诉我通过特定正则表达式做到这一点的方法吗?

非常感谢!

1 个答案:

答案 0 :(得分:1)

我建议您删除除3以外的ChildNode(TEXT_NODE)的所有nodeType。 (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.textContentfiddle),即:

(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