我有这个节点:
<p>text.. <span>hi</span><a>bye</a> more text..</p>
我想仅使用直接文本获取元素内容,而不在内部使用任何标记(在上面的示例中为a和span),就像我得到的那样:<p>text.. more text..</p>
。
你能告诉我通过特定正则表达式做到这一点的方法吗?
非常感谢!
答案 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.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.childNodes
和Node.removeChild()
。
注意:请不要使用正则表达式来解析html。请参阅this answer。