Javascript 包含字符串的文本元素的DOM查询
我调用了以下文本节点(在Javascript 包含字符串的文本元素的DOM查询,javascript,dom,Javascript,Dom,我调用了以下文本节点(在中的节点): <g id="shape29-19"> <text x="18" y="600"> <v:paragraph></v:paragraph> <v.tabList></v:tabList> "Cash Net" </text> </g> “现金净额” 使用以下查询:document.querySe
中的节点):
<g id="shape29-19">
<text x="18" y="600">
<v:paragraph></v:paragraph>
<v.tabList></v:tabList>
"Cash Net"
</text>
</g>
“现金净额”
使用以下查询:
document.querySelector(“shape29-19>text”)
。如何更改JavaScript查询,以便返回包含包含“'Cash Net'
”字符串的文本节点的所有元素?您可以将其过滤掉:
var elems = Array.prototype.filter.call(
document.querySelectorAll("#shape29-19 > text"),function(x) {
return x.textContent.indexOf('"Cash Net"') > -1;
}); // elems contains the elements which you're looking for
如果可能,最好修改结构,以便将文本包装在元素中。按文本内容选择DOM并不是最好的方法。这是页面的呈现方式,我没有选择节点的结构方式。您只需选择
文本
元素,并将集合筛选为包含该文本的元素。只需使用querySelectorAll
和.filter()
或for
循环即可。我可以用标记名替换查询中的ID选择器吗?请注意。。。您可以将其缩小为文本
,而不是*
;返回的节点集合没有.filter()
方法;.innerText
属性是非标准的,因此请改用.textContent
;无需true:false
,只需返回
@斜视的结果,我实现了.filter
,因此将其转换为数组,并感谢其他建议。合并:)+1看起来不错。最后一个提示。不要借用.slice()
来执行.filter()
操作,只需借用.filter()
并跳过.slice()
。所以Array.prototype.filter.call(document.queryselectoral(…
)。这样做会更简短更快。:@Xenyal:调试它以找出原因。