Цепочка множественных селекторов в 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)


кажется, не работает.

634   6  

6 ответов:

вы можете объединить несколько селекторов с запятой:

$('#Create .myClass,#Edit .myClass').plugin({options here});

или если у вас будет их куча, вы можете добавить класс ко всем своим элементам формы, а затем выполнить поиск в этом классе. Это не дает вам предполагаемой экономии скорости ограничения поиска, но я честно не стал бы слишком беспокоиться об этом, если бы я был на вашем месте. Браузеры делают много причудливых вещей, чтобы оптимизировать общие операции за вашей спиной - Простой селектор классов может быть быстрее.

$("#Create").find(".myClass").add("#Edit .myClass").plugin({});

использовать $.fn.add для объединения двух наборов.

вы должны быть в состоянии использовать:

$('#Edit.myClass, #Create.myClass').plugin({options here});

jQuery / несколько селекторов

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

$("#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

    Ничего не найдено.