为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

侃侃尔雅 2021-07-13 17:01:27
我想回到所有的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 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

尝试以下任一方法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:

//img1.sycdn.imooc.com//60efea910001e3ed16330793.jpg

使用或条件更新 xpath

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


查看完整回答
反对 回复 2021-07-15
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

你可以用不同的方法剥同一个苹果。但是,在这种情况下,我会坚持以下几点。

试试这个:

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


查看完整回答
反对 回复 2021-07-15
  • 3 回答
  • 0 关注
  • 192 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信