Я ищу, чтобы получить все элементы, которые заканчиваются на число. Так что для примера у нас есть <a> с этим href.

href="artist.php?id=8932

Теперь я могу получить все вхождения href с помощью:

document.querySelectorAll("[href^='artist.php?id=']")

Однако это также дает мне такие результаты, как

artist.php?id=8932#comments

Так что я хочу, чтобы я мог получить только hrefs, заканчивающиеся на число в массиве. Я действительно не хотел бы сначала создать массив со всеми результатами, а затем очистить #extras и удалить дубликаты.

Обратите внимание, что я не буду и не буду использовать jQuery.

5
Nimink0 26 Фев 2018 в 03:56

3 ответа

Лучший ответ

Так как querySelectorAll не принимает регулярное выражение, нет способа проверить, заканчивается ли href числом, используя селектор css. Но вы можете просто отфильтровать все hrefs, заканчивающиеся числами, используя .filter и .match.

let links = [...document.querySelectorAll("[href^='artist.php?id=']")].filter(a => a.href.match(/\d+$/));
console.log(links);
<a href="artist.php?id=123"></a>
<a href="artist1.php?id=123"></a>
<a href="artist.php?id=123#comment"></a>
<a href="artist.php?id=abc"></a>
<a href="artist.php?id=abc123"></a>
2
Kirill Simonov 26 Фев 2018 в 01:22

Ваш вопрос вводит в заблуждение, я делаю следующий тест, и все работает отлично.

<a href="artist.php?id=1992">xxxx</a>

var v= document.querySelectorAll("[href^='artist.php?id=']")[0]
console.log(v.href);

output is :    
http://localhost:63342/artist.php?id=1992
0
forqzy 26 Фев 2018 в 01:08

Хотя нет способа включить только те, которые заканчиваются на число, есть способ отфильтровать OUT ссылки, заканчивающиеся на comments.

Пример в скрипке.

const ids = document.querySelectorAll("[href^='artist.php?id=']:not([href$=comments])");



console.log(ids);
<a href="artist.php?id=8932#comments">
<a href="artist.php?id=007">
0
Jeremy J Starcher 26 Фев 2018 в 01:09