Несколько цепочек селекторов в JQuery? - PullRequest
58 голосов
/ 21 апреля 2011

Обычно, когда я использую класс в качестве селектора, я пытаюсь использовать с ним селектор "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});

Так что это в значительной степени тот же код. Мне интересно, есть ли способ заставить его искать любой из идентификаторов?

Редактировать

У меня проблемы с ним, когда у меня есть переменные для моих селекторов

    my.selectors = 
    {
        A: '#Create',
        B: '#Edit',
        Plugin: ' .Plugin' 
    };

 $(selector.A+ selectors.Plugin, selector.B+ selectors.Plugin)

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

Ответы [ 6 ]

87 голосов
/ 21 апреля 2011

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

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

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

40 голосов
/ 21 апреля 2011

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

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

10 голосов
/ 21 апреля 2011

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

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

jQuery |Несколько селекторов

9 голосов
/ 21 апреля 2011

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

$("#Create, #Edit").find(".myClass").plugin(){
    // Options
});
6 голосов
/ 21 апреля 2011

как:

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

Вы можете указать любое количество селекторов для объединения в один результат.Этот комбинатор множественных выражений является эффективным способом выбора разнородных элементов.Порядок элементов DOM в возвращенном объекте jQuery может не совпадать, так как они будут в порядке документов.Альтернативой этому комбинатору является метод .add ().

0 голосов
/ 21 сентября 2016

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

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

Для этого случая это будет выглядеть так:

 $('.myClass').filter(function(index, elem) {
    var jElem = $(elem);

    return jElem.closest('#Create').length > 0 || 
           jElem.closest('#Edit').length > 0;

}).plugin(...);

Как я уже говорил, здесьэто решение может быть бесполезным, но для дальнейших проблем это очень хороший вариант

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...