Найти все элементы на основе ids с помощью regex в селекторе jQuery
У меня есть несколько элементов с уникальными идентификаторами:
Я надеялся, что следующее будет работать с использованием jQuery:
$("#item-[.]+-top").each(function() { $(this).hide(); });
Я не очень хорошо разбираюсь в регулярных выражениях, и я был бы признателен за ввод данных, поскольку приведенное выше неверно.
- Использование Java для поиска подстроки большей строки с использованием регулярного выражения
- Нет совпадений с c ++ 11 regex
- Как создать совпадение регулярных выражений?
- Почему такая плохая идея анализировать XML с помощью регулярного выражения?
- Регулярное выражение для разделения строки с использованием пробела, если оно не окружено одинарными или двойными кавычками
- Выражение основных критериев запроса доступа в виде регулярных выражений
- Замените все пробелы меткой разрыва строки / абзаца, чтобы сделать список слов
- Как мне сопоставить всю строку с регулярным выражением?
- Список всех файлов, соответствующих шаблону полного пути в R
- Число регулярных выражений от 1 до 100
- Закаленный жадный токен - что отличает размещение точки до негативного взгляда
- Простое альфа-числовое регулярное выражение (одиночное расстояние) без катастрофического обратного отсчета
- Как работает RegexOptions.Compiled?
Если вы делали это с регулярным выражением, выражение было бы просто:
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 были более подходящими.