Есть ли подстановочный знак для идентификаторов (id)?
Если у меня есть неизвестное количество идентификаторов, разделяющих определенную схему именования, есть ли способ сразу их захватить с помощью jQuery?
// These are the IDs I'd like to select
#instance1
#instance2
#instance3
#instance4
// What do I need to add or how do I need to modify this jQuery selector in order to select all the IDs above?
("#instanceWILDCARD").click(function(){}
Ответы
Ответ 1
Атрибут начинает с селектора ('^=
) будет работать для ваших идентификаторов, например:
$("[id^=instance]").click(function() {
//do stuff
});
Однако подумайте о том, чтобы дать вашим элементам общий класс, например (я взламываю себя) .instance
и использовать этот селектор:
$(".instance").click(function() {
//do stuff
});
Ответ 2
Если вы действительно хотите сопоставлять классы, а не идентификаторы, синтаксис немного более активен, так как класс может иметь несколько значений.
// handle elements like <div class="someclass1"></div>
$('[class^="someclass"]').click(function() {
// do stuff
});
// handle elements like <div class="foo someclass1"></div>
$('[class*=" someclass"]').click(function() {
// do stuff
});
Ответ 3
Я удивлен, что никто не упомянул о создании собственного селектора фильтров (расширением функциональности JQuery Selector). Здесь я создал селекторы подстановочных знаков, которые я назвал "likeClass" и "likeId", который принимает любую подстановочную строку и найдет все элементы, которые соответствуют (аналогично соответствию Regex).
Код:
$.expr[':'].likeClass = function(match){
return $('[class*=" '+ match +'"]');
};
$.expr[':'].likeId = function(match){
return $('[id*=" '+ match +'"]');
};
Пример использования
Теперь предположим, что у вас есть несколько элементов div с похожими именами, такими как .content-1,.content-2,.content-n... и т.д., и вы хотите их выбрать. Теперь это торт!
$( 'ДИВ: likeClass (контент-)');//Возвращает все элементы, имеющие аналогичное имя класса: content - *
или
$( 'ДИВ: likeClass (контент-)');//Возвращает все элементы с похожим идентификатором: content - *
О да, еще одна вещь... вы тоже можете ее сцепить.:)
$('li:likeId(slider-content-)').hide().addClass('sliderBlock').first().fadeIn('fast');
Наслаждайтесь!
Ответ 4
Нет необходимости в дополнительном expr или что-нибудь интересное, если у вас есть jQuery
jQuery('[class*="someclass"]').click(function(){
});
jQuery('[id*="someclass"]').click(function(){
});
Как отмечено: fooobar.com/questions/89490/...
Ответ 5
Почему бы вам просто не назначить class = "instance"
всем им и выбрать их с помощью $('.instance')
?
Ответ 6
Это идентификаторы, но вы можете сделать что-то похожее на:
$("[id^='instance']").click(...)
Это немного дорого - помогает, если вы можете указать либо a) тип элемента, либо b) общее положение в DOM, например:
$("#someContentDiv span[id^='instance']").click(...)
Селектор [id^='...']
в основном означает "найти элемент, идентификатор которого начинается с этой строки, аналогичный id$=
(ID заканчивается этой строкой) и т.д.
Вы можете найти исчерпывающий список на странице Документов jQuery здесь.
Ответ 7
Используйте морковь.
$("div[id^=instance]").hide();
Пример jsFiddle
Ответ 8
Мы можем сделать это следующим образом:
$(document).ready(function () {
$('[id*=btnOk]').live("click", function () {
});
});
Ответ 9
Это единственный правильный ответ на вопрос о шаблоне id.
$('[id*="Wild card in double quotes"]')
Это получит "Дикую карту в двойных кавычках, а там еще!!!", а также "Больше BS перед Wild Wild Card в двойных кавычках".
Вы должны использовать кавычки, отличные от ваших тегов [].