1

我正在使用 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>
4

1 回答 1

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

谢谢你

于 2013-05-09T00:15:30.917 回答