Ответы:
Используйте запятую.
'.classA, .classB'
Вы можете опустить пространство.
AND
будет .classA.classB
.
Использование запятой может быть недостаточным, если у вас есть несколько объектов jQuery, которые необходимо объединить.
Метод .add () добавляет выбранные элементы в набор результатов:
// classA OR classB
jQuery('.classA').add('.classB');
Это более многословно, чем '.classA, .classB'
, но позволяет вам создавать более сложные селекторы, как показано ниже:
// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));
Я написал невероятно простой (5 строк кода) плагин именно для этой функциональности:
http://byrichardpowell.github.com/jquery-or/
Это позволяет вам эффективно сказать «получить этот элемент, или, если этот элемент не существует, используйте этот элемент». Например:
$( '#doesntExist' ).or( '#exists' );
Хотя принятый ответ обеспечивает аналогичную функциональность, если оба селектора (до и после запятой) существуют, оба селектора будут возвращены.
Я надеюсь, что это окажется полезным для тех, кто может попасть на эту страницу через Google.
"a" || "b"
vs. null || "b"
в ванильном JS. Если мы применяем такое же поведение здесь, $(a).or(b)
должен вернуться, $(a)
если он существует, в противном случае он должен вернуться $(b)
. Я не думаю, что с этой номенклатурой что-то не так, поскольку "или" соответствует поведению JS "||" (или) оператор.
or
. То, о чем говорят другие, больше похоже на действие concat
или merge
действие.
Если вы хотите использовать стандартную конструкцию element = element1 || element2, где JavaScript вернет первое правдивое, вы можете сделать именно это:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
который возвратил бы первый элемент, который фактически найден. Но, возможно, лучшим способом было бы использовать запятую конструкцию селектора jQuery (которая возвращает массив найденных элементов) следующим образом:
element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];
который вернет первый найденный элемент.
Я использую это время от времени, чтобы найти активный элемент в списке или какой-либо элемент по умолчанию, если нет активного элемента. Например:
element = $('ul#someList').find('li.active, li:first')[0]
который вернет любой li с классом active или, если его нет, просто вернет последний li.
Либо будет работать. Есть потенциальные потери производительности, хотя, как || остановит обработку, как только найдет что-то правдивое, тогда как подход с использованием массива попытается найти все элементы, даже если он уже нашел один. Опять же, используя || У конструкции потенциально могут быть проблемы с производительностью, если ей придется пройти через несколько селекторов перед тем, как найти тот, который он вернет, потому что он должен вызывать основной объект jQuery для каждого (я действительно не знаю, является ли это падением производительности или нет, это просто кажется логичным, что это может быть). В целом, однако, я использую подход массива, когда селектор является довольно длинной строкой.