Получить все ссылки на веб-странице с условием xpath

#javascript #html #jquery #xpath

#javascript #HTML #jquery #xpath

Вопрос:

Для веб-страницы give я могу извлечь все ссылки в ней с помощью document.links . Однако я хочу исключить ссылки, которые содержат href="javascript:void(0)"

Я пытаюсь исключить такие ссылки, используя xpath, подобный этому document.links.evaluate("//a[not(@href='javascript:void(0)')]", document) , но не могу их отфильтровать.

Пожалуйста, предложите обходной путь

введите описание изображения здесь

Комментарии:

1. Почему бы не прийти в 21-й век и не использовать document.querySelectorAll("a[href!='javascript:void(0)']") ? document.links это древний API, и XPath не требуется в документе HTML DOM.

2. @ScottMarcus когда я это сделал, я получаю сообщение об ошибке как Uncaught DOMException: Failed to execute 'querySelectorAll' on 'Document': 'a[href!='javascript:void(0)']' is not a valid selector.

3. @ScottMarcus != не является допустимым оператором выбора атрибута. Но есть a:not([href="javascript:void(0)"])

4. большое спасибо… теперь это сработало

Ответ №1:

Вы должны использовать CSS напрямую

 const links = document.querySelectorAll('a:not([href="javascript:void(0)"])');

console.log(links.length)  
 <a href="something">something</a>
<a href="http://some.where">some.where</a>
<a href="javascript:void(0)">void</a>
<a href="https://somewhere.else">somewhere.else</a>  

Ответ №2:

Если вы хотите проверить все, что находится в ссылке, вы можете сначала выполнить фильтрацию

 const links = [...document.querySelectorAll("a")]
  .filter(lnk => !lnk.href.includes("javascript:"))
  .map(lnk => lnk.href)

console.log(links)  
 <a href="javascript:void(0)">Link1</a>
<a href="https://google.com">Link2</a>
<a href="javascript:void(0)">Link3</a>
<a href="https://mdn.com">Link4</a>