Как выбрать элемент, который соответствует части внутреннего текста элемента, используя XPATH с JavaScript - PullRequest
0 голосов
/ 22 марта 2020

У меня есть документ HTML, содержащий некоторые ссылки, и я пытаюсь использовать XPATH, чтобы выбрать ссылку, содержащую веб-сайт для компании AIG.

 <a class="cmp-CompanyLink"
      href="http://www.aig.com/careers"
      target="_blank"
      rel="nofollow noopener"
      data-tn-link="redirect"
      data-tn-element="companyLink"
      >AIG website</a>

Вот этот HTML:

<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="style.css" />
  </head>
  <body>
    <h1>Hello Plunker!</h1>
    <div class="cmp-AboutMetadata-itemInner">
      <div class="cmp-AboutMetadata-itemTitle">Website</div>
      <div class="cmp-AboutMetadata-itemCotent">
        <a
          class="cmp-CompanyLink"
          href="https://twitter.com/AIGinsurance"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >Twitter</a
        >
        <br />
        <a
          class="cmp-CompanyLink"
          href="https://www.facebook.com/AIGInsurance"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >Facebook</a
        >
        <br /><a
          class="cmp-CompanyLink"
          href="https://twitter.com/AIGinsurance"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >Twitter</a
        ><br /><a
          class="cmp-CompanyLink"
          href="https://www.facebook.com/AIGInsurance/"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >Facebook</a
        ><br /><a
          class="cmp-CompanyLink"
          href="https://www.linkedin.com/company/aig"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >LinkedIn</a
        ><br /><a
          class="cmp-CompanyLink"
          href="https://www.instagram.com/aigrugby/"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >Instagram</a
        ><br /><a
          class="cmp-CompanyLink"
          href="https://www.youtube.com/user/AIG"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >YouTube</a
        ><br /><a
          class="cmp-CompanyLink"
          href="http://www.aig.com/careers"
          target="_blank"
          rel="nofollow noopener"
          data-tn-link="redirect"
          data-tn-element="companyLink"
          >AIG website</a
        ><br /><a
          data-tn-action-click="true"
          data-tn-element="less-link"
          href="#"
          >less</a
        >
      </div>
    </div>
    <script src="script.js"></script>
  </body>
</html>

Вот мой JavaScript код и хищник :

var link = document.evaluate("//а[@class='cmp-CompanyLink' and contains(text(), 'website')]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);

document.body.innerHTML += "<br />Result:<br />";

document.body.innerHTML += link.singleNodeValue;

if(link.singleNodeValue){
  const result = "<br /> found: " + link.singleNodeValue.textContent;
  document.body.innerHTML += result; 
}

Я не уверен, что здесь ошибка. Любые идеи о том, почему ссылка является нулевой? Как мне получить правильный узел?

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Кажется, что ваш XPath содержит кириллицу c символ "a" (в // a):

https://www.fileformat.info/info/unicode/char/0430/index.htm

Просто замените его на нормальный, и он должен работать.

Альтернатива:

//a[starts-with(.,"AIG")]/@href
1 голос
/ 22 марта 2020

Попробуйте использовать

var link = document.evaluate(("//a[@class='cmp-CompanyLink'][contains(text(), 'website')]/@href") , document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.textContent;

document.body.innerHTML += "<br />Result:<br />";

document.body.innerHTML += link;

if(link){
  const result = "<br /> found: " + link;
  document.body.innerHTML += result; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...