使用XPath选择一组连续的html元素

时间:2013-05-09 00:15:31

标签: xpath moovweb tritium

我使用的是Moovweb SDK,我希望将我写的Tritium函数应用于具有特定类名的每组连续元素。 给定html元素的平面层次结构,我应该如何仅选择使用XPath出现在行中的元素组?

选择连续元素组而不仅仅是所有元素是非常重要的,因为我将基于它们相对于前一个<h2>的索引来应用类名和样式。

<h2>Blah</h2>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<h2>Blah</h2>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>
<h2>Blah</h2>
<span class="hi">hi</span>
<span class="hi">hi</span>
<span class="hi">hi</span>

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题:

$(".//h2") {
  %x = text()
  do_something("./following-sibling::span[preceding-sibling::h2[1][.='"+%x+"'] and contains(@class,'hi')]")
}

它正在做的是抓住每个h2的文本,并将跨度的先前兄弟h2的文本与它进行比较。所以它只会在不同的h2之间选择跨度(do_something是自定义的Tritium函数)

注意:这会跳过可能位于h2之间的任何其他类型的节点。

编辑:我改变了

("./following-sibling::span[preceding-sibling::h2[1][.='"+%x+"']][@class='hi']")

("./following-sibling::span[preceding-sibling::h2[1][.='"+%x+"'] and contains(@class,'hi')]")

请参阅此示例:http://play.tritium.io/192d6bd9af3fcd1c26bb6487cb10c599eabbef83

谢谢你noj