我使用的是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>
答案 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