如果同一行中的跨度包含文本,则XPath评估返回锚href

时间:2019-06-24 17:59:22

标签: javascript xpath

如果同一行中的 span 包含一个 href 标签,我想返回所有 href 特定的文本,但是我不确定如何编写此XPath表达式。

下面的代码是我所能获得的,它将返回 span innerHTML

Jsfiddle:https://jsfiddle.net/m95wdg7f/

var fruitsArray = [];
var nodesSnapshot = document.evaluate("//body/table/tbody/tr[*]/td[*]/span[contains(.,'apple')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ) {
    fruitsArray.push(nodesSnapshot.snapshotItem(i).innerHTML);
}
alert(fruitsArray);
<table>
<tr>
  <td><a href="http://www.oranges.com">link</a></td>
  <td></td>
  <td><span>orange</span></td>
</tr>
<tr>
  <td><a href="http://www.apples.com">link</a></td>
  <td></td>
  <td><span>apple</span></td>
</tr>
<tr>
  <td><a href="http://www.bananas.com">link</a></td>
  <td></td>
  <td><span>banana</span></td>
</tr>
<tr>
  <td><a href="http://www.apples.com">link</a></td>
  <td></td>
  <td><span>apple</span></td>
</tr>
</table>

在我看来,解决方案应如下所示:

//body/table/tbody/tr[*]/td[*]/a//body/table/tbody/tr[*]/td[*]/span[contains(.,'apple')]

3 个答案:

答案 0 :(得分:3)

尝试以下任何xpath来基于<a>文本找到span标签。

//span[contains(.,'apple')]/parent::td/preceding-sibling::td/a

OR

//table//tr//td//span[contains(.,'apple')]/ancestor::td/preceding-sibling::td/a

OR

//table//tr//td//span[contains(.,'apple')]/parent::td/parent::tr/td/a

演示1: enter image description here


使用条件更新xpath

//span[contains(.,'apple') or contains(.,'banana') ]/parent::td/preceding-sibling::td/a 

答案 1 :(得分:1)

一个简单一些的表达式:

//a/parent::*[contains(..,'apple')]/a/@href

这将选择两个http://www.apples.com链接。

答案 2 :(得分:1)

您可以用不同的方式去皮。但是,在这种情况下,我将坚持以下原则。

尝试一下:

"//tr[.//span[contains(.,'apple')]]//a/@href"
相关问题