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

标签 javascript xpath

如果同一中的span包含特定的文本,但我不确定如何编写此 XPath 表达式。

下面的代码是我所能得到的,它会返回spaninnerHTML

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')]

最佳答案

尝试以下任何一项 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: enter image description here


使用 or 条件更新 xpath

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

关于javascript - 如果同一行中的跨度包含文本,则 XPath 评估返回 anchor href,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56741729/

相关文章:

xml - 使用 XPath 提取字符串的一部分

javascript - ActionScript 3 - ArgumentError : Error #2025: The supplied DisplayObject must be a child of the caller

javascript - CSS 属性更新不适用于鼠标单击

php - js中的模块和php中的类有什么区别?

java - xpath 和使用日期函数的查询

xml - 帮助将 xpath 结果转换为格式化字符串

javascript/html5 播放多个音频文件或重叠音频

javascript - 使用 jQuery 检查标签是否为空

internet-explorer - Internet Explorer中的XPath及其与Chrome,Firefox中Xpaths的区别

python - Odoo - 自定义模块卸载时出现内部服务器错误