我有这个节点:
<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.childNodes
和 Node.removeChild()
.
注意:请不要使用正则表达式来解析 html。请参阅this answer .
关于javascript - 删除标记名内字符串的一部分(通过js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25472054/