XPath оценивает возвращаемую привязку href, если span в той же строке содержит текст - PullRequest
1 голос
/ 24 июня 2019

Я хочу вернуть все href тегов anchor , если span в той же строке содержит определенный text , но я не уверен, как написать это выражение XPath.

Ниже приведен код, насколько это возможно, и он вернет мне span s 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 ]

3 голосов
/ 24 июня 2019

Попробуйте выполнить любое из следующих действий 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 голос
/ 25 июня 2019

Вы можете очистить одно и то же яблоко по-разному.Однако в таких случаях я бы придерживался следующего:

Попробуйте:

"//tr[.//span[contains(.,'apple')]]//a/@href"
1 голос
/ 24 июня 2019

Несколько более простое выражение:

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

Это выберет две http://www.apples.com ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...