如何用XPath查找属性名以jQuery开头且值为139的div元素
解决XPath查找特定前缀属性且值精确匹配的问题
嘿,我明白你要找的是属性名以jQuery开头且属性值正好是139的<div>元素,原来的XPath表达式确实有逻辑问题,我来帮你修正它!
问题出在哪?
你写的//div[@*[starts-with(name(), 'jQuery')]='139']错误点在于:
@*[starts-with(name(), 'jQuery')]会返回所有符合前缀的属性节点,但直接用='139'去和这些节点做比较,不符合XPath的语法逻辑。我们需要的是找到存在某个属性,它同时满足「名称以jQuery开头」和「值等于139」两个条件。
正确的XPath表达式
这里有两种可靠的写法,都能精准定位到目标元素:
写法1:明确检查属性的双重条件
//div[./@*[starts-with(name(), 'jQuery') and .='139']]
- 逻辑拆解:先定位所有
<div>,然后在每个div的属性中,筛选出名称以jQuery开头且属性值等于139的属性节点;只要某个div存在这样的属性,就会被选中。
写法2:更简洁的链式谓语(推荐)
//div[@*[starts-with(local-name(), 'jQuery')][.='139']]
- 这里用
local-name()替代name()是更通用的写法:如果属性带有命名空间,name()会返回带命名空间前缀的属性名,而local-name()只返回属性的本地名称(比如jQuery1124022385363269720443),在你的场景里两种都能用,但local-name()适配性更强。
验证效果
用这个表达式匹配你提供的HTML,正好会选中这个目标元素:
<div class="selectize-input items not-full" jQuery1124022385363269720443="139">
而页面中其他带有jQuery前缀但值不是139的<div>会被排除在外,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Almagawar
相关产品推荐
相关产品推荐

