Цепочка множественных селекторов в jQuery?
обычно, когда я использую класс в качестве селектора, я пытаюсь использовать селектор " id " с ним, чтобы он не искал всю страницу, а только область, где будет класс.
однако у меня есть частичное представление с кодом в нем. Это частичное представление (общий код) оборачивается вокруг тега формы.
Я:
<form id="Create">
// load common code in from partial view
</form>
<form id="Edit">
// load common code in from partial view
</form>
Теперь в этом общем код мне нужно прикрепить плагин к нескольким полям, так что я бы сделал
$('#Create .myClass').plugin({ options here});
$('#Edit .myClass').plugin({options here});
Так что это в значительной степени тот же код. Мне интересно, есть ли способ заставить его искать любой из идентификаторов?
Edit
у меня возникли проблемы с ним, когда у меня есть переменные для моих селекторов
my.selectors =
{
A: '#Create',
B: '#Edit',
Plugin: ' .Plugin'
};
$(selector.A+ selectors.Plugin, selector.B+ selectors.Plugin)
кажется, не работает.
6 ответов:
вы можете объединить несколько селекторов с запятой:
$('#Create .myClass,#Edit .myClass').plugin({options here});или если у вас будет их куча, вы можете добавить класс ко всем своим элементам формы, а затем выполнить поиск в этом классе. Это не дает вам предполагаемой экономии скорости ограничения поиска, но я честно не стал бы слишком беспокоиться об этом, если бы я был на вашем месте. Браузеры делают много причудливых вещей, чтобы оптимизировать общие операции за вашей спиной - Простой селектор классов может быть быстрее.
$("#Create").find(".myClass").add("#Edit .myClass").plugin({});использовать
$.fn.addдля объединения двух наборов.
вы должны быть в состоянии использовать:
$('#Edit.myClass, #Create.myClass').plugin({options here});
Я думаю, что вы могли бы увидеть немного лучшую производительность, делая это таким образом:
$("#Create, #Edit").find(".myClass").plugin(){ // Options });
как:
$('#Create .myClass, #Edit .myClass').plugin({ options: here });вы можете указать любое количество селекторы для объединения в один результат. Это множественное выражение combinator-это эффективный способ выберите разрозненные элементы. Порядок из элементов DOM в возвращенном объект jQuery может быть не идентичен, так как они будут в порядке документов. Один альтернативой этому комбинатору является .метод add.
здесь уже есть очень хорошие ответы, но в некоторых других случаях (не это в частности) использование map может быть "единственным" решением.
особенно, когда мы хотим использовать регулярные выражения, отличные от стандартных.
в этом случае это будет выглядеть так:
$('.myClass').filter(function(index, elem) { var jElem = $(elem); return jElem.closest('#Create').length > 0 || jElem.closest('#Edit').length > 0; }).plugin(...);Как я уже говорил, здесь такое решение может быть бесполезным, но для дальнейших проблем, - это очень хороший вариант
Comments