[英]Can't use DOM Node's properties as filters on XPath / CSS Selector query
我正在尝试使用DOM Node的属性 (例如innerText
和textContent
)作为过滤器来搜索DOM元素,但没有成功。
以以下HTML为例:
<html>
<body>
<div class="one">
<div class="two">
<div class="three">
<div>Text Here</div>
</div>
</div>
</div>
</body>
</html>
如果我使用class属性搜索节点,则可以使用XPath(评估)和CSS Selector(querySelectorAll)函数访问innerText
属性:
document.evaluate("//div[@class = 'one']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE,
null).singleNodeValue.innerText;
document.querySelectorAll("div.one")[0].innerText;
但是,使用innerText
属性而不是class
不会给我任何结果:
document.evaluate("//div[@innerText = 'Text Here']",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE,
null).singleNodeValue;
document.querySelectorAll("div[innerText='Text Here']")[0];
我用nodeName
和textContent
进行了测试,它也失败了,所以这就是为什么我认为它与不是标签属性的DOM属性有关。
我尝试使用XPath text()
函数,但是在上例中的<div class="one">
上使用它不会返回“ Text Here”。
所有测试均在Linux Mint的Google Chrome v67上进行。
为什么会这样? 我要做什么有解决方案或解决方法?
innerText
不是属性 ,因此@innerText
不起作用。 另外, 'Text Here'
不是<div class="one">
的子文本节点,而是后代文本节点,因此//div[text()='Text Here' and @class='one']
将不起作用(但是//div[.//text()='Text Here' and @class='one']
应该可以)
您应该在下面尝试按文本内容查找所需的div
:
document.evaluate("(//div[.='Text Here'])[1]",
document, null, XPathResult.FIRST_ORDERED_NODE_TYPE,
null).singleNodeValue;
如果有更多的后代文本节点,但是您只想通过"Text Here"
进行定位,则可以尝试XPath:
(//div[.//div='Text Here'])[1]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.