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

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

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

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

Я не очень хорошо разбираюсь в регулярных выражениях, и я был бы признателен за ввод данных, поскольку приведенное выше неверно.

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

 item-\d-top 

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

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

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

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

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

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

Если идентификатор был чем-то вроде 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() ); }); 

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

Джеймс Падольси создал замечательный фильтр, который позволяет использовать регулярное выражение для выбора.

 jQuery.expr[':'].regex = function(elem, index, match) { var matchParams = match[3].split(','), validLabels = /^(data|css):/, attr = { method: matchParams[0].match(validLabels) ? matchParams[0].split(':')[0] : 'attr', property: matchParams.shift().replace(validLabels,'') }, regexFlags = 'ig', regex = new RegExp(matchParams.join('').replace(/^s+|s+$/g,''), regexFlags); return regex.test(jQuery(elem)[attr.method](attr.property)); } 

Теперь вы можете использовать

 $('div:regex(id,item-[0-9]-top)').hide() 

Ударьте аналогичную проблему и любите / одобренный ответ serg на создание classа, а затем, потому что я делал несколько операций над такими элементами, Keyed Collections были более подходящими.

  • Поддерживает ли bash поддержку регулярных выражений?
  • Escape Special Character в Regex
  • Notepad ++ Удаляет все, кроме 40 переменных, помещая их в свою линию, комбинируя регулярное выражение
  • Код C # для связывания URL-адресов в строке
  • Может ли кто-нибудь объяснить мне Потенциальные Квантеры? (Обычные выражения)
  • VIM: Янки несколько неконкурсных фрагментов текста в регистры
  • Регулярное выражение, соответствующее действительным адресам IPv6
  • Использование String Format для отображения десятичной до 2-х мест или простого целого
  • Проверка адресов IPv4 с регулярным выражением
  • Как найти местоположение регулярного выражения в Perl?
  • Регулярное выражение в Notepad ++ 6
  • Давайте будем гением компьютера.