猿问

如果同一行中的跨度包含文本,则 XPath 评估返回锚点 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')]


侃侃尔雅
浏览 193回答 3
3回答

慕莱坞森

尝试以下任一方法xpath以<a>根据span文本查找标签。//span[contains(.,'apple')]/parent::td/preceding-sibling::td/a或者//table//tr//td//span[contains(.,'apple')]/ancestor::td/preceding-sibling::td/a或者//table//tr//td//span[contains(.,'apple')]/parent::td/parent::tr/td/a演示 1:使用或条件更新 xpath//span[contains(.,'apple')&nbsp;or&nbsp;contains(.,'banana')&nbsp;]/parent::td/preceding-sibling::td/a

慕尼黑8549860

你可以用不同的方法剥同一个苹果。但是,在这种情况下,我会坚持以下几点。试试这个:"//tr[.//span[contains(.,'apple')]]//a/@href"
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答