#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>