Мне интересно, есть ли способ иметь логику "ИЛИ" в селекторах jQuery. Например, я знаю, что элемент является потомком элемента с классом classA или classB, и я хочу сделать что-то подобное elem.parents('.classA or .classB')
. Предоставляет ли jQuery такую функциональность?
325
AND
будет.classA.classB
.Использование запятой может быть недостаточным, если у вас есть несколько объектов jQuery, которые необходимо объединить.
Метод .add () добавляет выбранные элементы в набор результатов:
Это более многословно, чем
'.classA, .classB'
, но позволяет вам создавать более сложные селекторы, как показано ниже:источник
Я написал невероятно простой (5 строк кода) плагин именно для этой функциональности:
http://byrichardpowell.github.com/jquery-or/
Это позволяет вам эффективно сказать «получить этот элемент, или, если этот элемент не существует, используйте этот элемент». Например:
Хотя принятый ответ обеспечивает аналогичную функциональность, если оба селектора (до и после запятой) существуют, оба селектора будут возвращены.
Я надеюсь, что это окажется полезным для тех, кто может попасть на эту страницу через Google.
источник
"a" || "b"
vs.null || "b"
в ванильном JS. Если мы применяем такое же поведение здесь,$(a).or(b)
должен вернуться,$(a)
если он существует, в противном случае он должен вернуться$(b)
. Я не думаю, что с этой номенклатурой что-то не так, поскольку "или" соответствует поведению JS "||" (или) оператор.or
. То, о чем говорят другие, больше похоже на действиеconcat
илиmerge
действие.Если вы хотите использовать стандартную конструкцию element = element1 || element2, где JavaScript вернет первое правдивое, вы можете сделать именно это:
который возвратил бы первый элемент, который фактически найден. Но, возможно, лучшим способом было бы использовать запятую конструкцию селектора jQuery (которая возвращает массив найденных элементов) следующим образом:
который вернет первый найденный элемент.
Я использую это время от времени, чтобы найти активный элемент в списке или какой-либо элемент по умолчанию, если нет активного элемента. Например:
который вернет любой li с классом active или, если его нет, просто вернет последний li.
Либо будет работать. Есть потенциальные потери производительности, хотя, как || остановит обработку, как только найдет что-то правдивое, тогда как подход с использованием массива попытается найти все элементы, даже если он уже нашел один. Опять же, используя || У конструкции потенциально могут быть проблемы с производительностью, если ей придется пройти через несколько селекторов перед тем, как найти тот, который он вернет, потому что он должен вызывать основной объект jQuery для каждого (я действительно не знаю, является ли это падением производительности или нет, это просто кажется логичным, что это может быть). В целом, однако, я использую подход массива, когда селектор является довольно длинной строкой.
источник
Наконец-то я нашел хак, как это сделать:
(выбирает div с классом
classA
ORclassB
с прямым дочерним диапазоном)источник
Daniel A. White Solution отлично работает на уроках.
У меня возникла ситуация, когда мне нужно было найти поля ввода, такие как donee_1_card, где 1 - индекс.
Мое решение было
Хотя я не уверен, насколько это оптимально.
источник