作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在创建一个小网络扩展,它根据文本修改网页。作为我的问题的一个例子,这里是一些代码,其中树遍历器抓取页面上的所有文本节点:
var treeWalker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_TEXT,
{ acceptNode: () => {return NodeFilter.FILTER_ACCEPT;} },
false
);
while(treeWalker.nextNode()) {
let x = treeWalker.currentNode.data;
//do something with x
}
不幸的是,x 将拥有节点中的所有文本,即使它没有显示在网页上。
我想要的是类似treeWalker.currentNode.innerText的东西,但是对于文本节点来说这是未定义的。有谁知道如何仅获取文本节点向用户显示的文本?
示例:如果网页具有包含以下 HTML 的节点:
<div>
<script type="text/x-config">
{
"setObject": -1
}
</script>
<span>Quiz</span>
与关联的 CSS:
script {
display: none;
}
然后,相应文本节点的文本内容(减去额外的空格和换行符)将作为“{ "setObject": -1 } Quiz”返回。然而,呈现给用户的唯一内容是“测验”。给定相应的文本节点,如何仅获取渲染的文本?
最佳答案
我想我们有问题。
如果您使用新的浏览器,您应该能够使用innerText,但如果不是,则必须使用textContent。textContent 的问题是它获取所有元素的内容,包括 and ,并且 textContent 不知道样式,因此它将返回隐藏事件。
我想正确的方法是将过滤器替换为 NodeFilter.SHOW_ELEMENT
并获取 Element.innerHTML
。
所以尝试一下:
var treeWalker = document.createTreeWalker(
document.body,
NodeFilter.SHOW_ELEMENT,
{ acceptNode: (node) => { return NodeFilter.FILTER_ACCEPT;} },
false
);
while(treeWalker.nextNode()) {
let x = treeWalker.currentNode.innerHTML;
//do something with x
}
关于javascript - 如何仅获取文本节点的渲染文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46460451/
我是一名优秀的程序员,十分优秀!