我有一个包含该类的div元素的集合media-gallery-item.
我想选择元素编号x.
只选择所有项目时,我得到5个结果
$x("//div[@id='content-area']//div[@class='media-gallery-item']")
Run Code Online (Sandbox Code Playgroud)
现在我希望能够选择项目编号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]")
Run Code Online (Sandbox Code Playgroud)
我知道这些并没有多大意义,因为它不是一个实际的AND,但更像是:"首先按照这个过滤,然后选择第二个匹配".这样做的目的是继续选择事物(例如在第二个元素中,获取元素的href属性a)
Fla*_*ack 11
一步一步的答案.
要选择具有div[@id='content-area']祖先的元素,这是他们各自父母的第二个孩子使用:
//div[@id='content-area']//div[2]
Run Code Online (Sandbox Code Playgroud)
要选择div具有div[@id='content-area']祖先使用的第二个(在文档顺序中)元素:
(//div[@id='content-area']//div)[2]
Run Code Online (Sandbox Code Playgroud)
请注意区别.
然后,选择元素,这是他们各自父母的第二个孩子,提供他们有一个类'media-gallery-item'使用:
//div[@id='content-area']//div[2][@class='media-gallery-item']
Run Code Online (Sandbox Code Playgroud)
选择元素,这些元素是那些具有类的子女(他们各自的父母)的第二个元素media-gallery-item:
//div[@id='content-area']//div[@class='media-gallery-item'][2]
Run Code Online (Sandbox Code Playgroud)
要选择div具有div[@id='content-area']祖先的第二个(在文档顺序中)元素,提供它具有media-gallery-item类:
(//div[@id='content-area']//div)[2][@class='media-gallery-item']
Run Code Online (Sandbox Code Playgroud)
要从div具有div[@id='content-area']祖先和media-gallery-item类的所有元素中选择第二个(按文档顺序):
(//div[@id='content-area']//div)[@class='media-gallery-item'][2]
Run Code Online (Sandbox Code Playgroud)
@Alejandro建议的规格报价:
谓词过滤相对于轴的节点集以产生新的节点集.对于要过滤的节点集中的每个节点,使用该节点作为上下文节点评估PredicateExpr,其中节点集中的节点数作为上下文大小,并且节点中的节点的接近位置-set相对于轴作为上下文位置
http://w3.org/TR/xpath/#predicates
节点集的成员相对于轴的接近位置被定义为如果轴是前向轴并且按照相反的文档顺序排序的,则按文档顺序排序的节点集中的节点的位置.是一个反向轴
http://w3.org/TR/xpath/#dt-proximity-position
底线是位置谓词相对于轴工作.您需要括号来明确声明优先级.因此,在计算位置时child,不考虑轴,而是descendant-or-self考虑解析轴之后的节点集.