我有一个div元素的集合,其中包含类media-gallery-item
我想选择元素编号x。
当选择所有项目时,我得到5个结果
$x("//div[@id='content-area']//div[@class='media-gallery-item']")
现在我希望能够选择第2项,但我无法弄清楚如何正确地合并这两项:
$x("//div[@id='content-area']//div[@class='media-gallery-item'][2]")
$x("//div[@id='content-area']//div[@class='media-gallery-item'
and position() = 2]")
我知道这些并没有多大意义,因为它不是真正的AND
,而更像是:“首先根据此过滤,然后选择第二场比赛”。
这样做的目的是继续选择内容(例如,在第二个元素中,获取href
元素的a
属性)
答案 0 :(得分:11)
分步回答。
选择具有div[@id='content-area']
祖先的元素,这是他们各自父母使用的第二个孩子:
//div[@id='content-area']//div[2]
选择使用div
祖先的第二个(按文档顺序)div[@id='content-area']
元素:
(//div[@id='content-area']//div)[2]
请注意区别。
然后,选择元素,这是他们各自父母的第二个孩子,提供他们有一个类'media-gallery-item'使用:
//div[@id='content-area']//div[2][@class='media-gallery-item']
选择元素,这些元素是那些具有类media-gallery-item
的孩子(他们各自的父母)的第二个元素:
//div[@id='content-area']//div[@class='media-gallery-item'][2]
要选择具有div
祖先的第二个(按文档顺序)div[@id='content-area']
元素,请为其提供media-gallery-item
类:
(//div[@id='content-area']//div)[2][@class='media-gallery-item']
从具有div
祖先和div[@id='content-area']
类的所有media-gallery-item
元素中选择第二个(按文档顺序):
(//div[@id='content-area']//div)[@class='media-gallery-item'][2]
@Alejandro建议规范引用:
谓词过滤节点集 尊重轴以产生新的 节点集。对于每个节点 要过滤的节点集, PredicateExpr用它进行评估 节点作为上下文节点,用 节点集中的节点数为 上下文大小,与附近 节点在节点集中的位置 相对于轴而言 背景位置
http://w3.org/TR/xpath/#predicates
成员的接近位置 相对于轴的节点集是 定义为节点的位置 在文档中排序的节点集中 如果轴是前轴,则排序 并按相反的文件顺序排序 如果轴是反转轴
http://w3.org/TR/xpath/#dt-proximity-position
底线是位置谓词相对于轴的作用。您需要括号来明确声明优先级。因此,在计算位置时,不会考虑child
轴,而是在解析descendant-or-self
轴之后的节点集。
答案 1 :(得分:0)
原来:括号!
(//div[@id='content-area']//div[@class='media-gallery-item'])[2]
作品
答案 2 :(得分:0)
看起来您以错误的方式访问属性。尝试使用
/div[@id='content-area' and @class='media-gallery-item'][2]