2016-04-28 77 views
1

使用XPath的一个节点,是有办法选择,其位置相当于另一个节点从不同的父姿势的节点?XPath来选择的位置,并根据其他节点的位置

具体,让我们说我有这个简单的HTML表(在此jsFiddle也可用):

<table> 
    <thead> 
    <tr> 
     <th>Col A</th> 
     <th>Col B</th> 
     <th>Col C</th> 
     <th>Col D</th> 
    </tr> 
    </thead> 
    <tbody> 
    <tr> 
     <td>Field A</td> 
     <td>Field B</td> 
     <td>Field C</td> 
     <td>Field D</td> 
    </tr> 
    </tbody> 
</table> 

比方说,我要选择的第2列的td,即<td>Field B</td>,但我想表达出来寻找标题为"Col B"的列。换句话说,我想选择<td>Field B</tb>,其中有position()=2,但不是硬编码2,我想通过查找其文本为"Col B"th来派生它。

我当然可以选择th,使用

$x("//th[text()='Col B']") 

但现在我想提取thposition()(等于2),并用它来选择td其位置。

概念,我想这样做以下,但实际上这并不是有效的XPath:

$x("//td[position()=//th[text()='Col B'][position()]") 

这可能不知?

回答

1

你可以指望它之前,其字符串值th为任何给定值,比如说,"Col B"th元件的数量,并使用该计数来选择对应的td元素:

//td[count(//th[.='Col B']/preceding-sibling::th)+1] 
+0

正是我需要的。谢谢! – meetamit

+1

不客气。感谢这样一个精心制定的有趣问题。 – kjhughes