Найдите все элементы на основе идентификаторов с помощью regex на селекторе jQuery

У меня есть несколько элементов с уникальными идентификаторами как так:

<div id='item-1-top'></div>
<div id='item-2-top'></div>
<div id='item-3-top'></div>

Я надеялся, что следующее будет работать с помощью jQuery:

$("#item-[.]+-top").each(function() {
  $(this).hide();
});

У меня нет хорошего схватывания регулярных выражений, и я ценил бы некоторый вход, поскольку вышеупомянутое, кажется, является неправильным.

25
задан HoldOffHunger 4 December 2017 в 21:17
поделиться

3 ответа

Если вы делали это с regex, выражение будет просто:

item-\d-top

Где \ d указывает любую отдельную цифру (0..9), а другие символы не имеют особого значения (поэтому рассматриваются как литералы).

Однако jQuery в настоящее время не имеет фильтра регулярных выражений (только такие вещи, как начало / конец / содержит / и т. Д.), Поэтому вам придется создать свой собственный (что возможно, но если вы считаете, что вам следует прекратить и подумайте, что / почему вы фильтруете, и сначала выясните, есть ли лучший способ).

Гораздо проще было бы создать класс (как предлагает serg555 ) , поскольку именно так вы обращаетесь с этими элементами.

Или (если вы не можете изменить разметку для добавления класса), затем используйте существующие фильтры, расширяя ответ gddc , я мог бы сделать:

$('div[id^=item-][id$=-top]').hide()

(Поскольку у вас может быть несколько элементы, заканчивающиеся только на «верх», сейчас или в будущем, поэтому вам нужно быть более конкретным, чтобы случайно не скрыть другие вещи.)

39
ответ дан 28 November 2019 в 18:17
поделиться

Я бы присвоил им какой-нибудь класс, например item, а затем сделал бы поиск по этому классу $(".item").

8
ответ дан 28 November 2019 в 18:17
поделиться

Если бы id был чем-то вроде news-top-1, news-top-2, news-top-3, news-top-4 и т.д., то селекторы помогли бы вам.

http://api.jquery.com/attribute-starts-with-selector/

$.each( $("input[name^='news-top-']"), function () {
  alert( $(this).hide() );
});
14
ответ дан 28 November 2019 в 18:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: