Eu estou querendo saber se existe uma maneira de ter lógica "OU" nos seletores de jQuery. Por exemplo, eu sei que um elemento é um descendente de um elemento com a classe classA ou classB, e quero fazer algo assim elem.parents('.classA or .classB')
. O jQuery fornece essa funcionalidade?
jquery
jquery-selectors
Suan
fonte
fonte
AND
seria.classA.classB
.Usar uma vírgula pode não ser suficiente se você tiver vários objetos jQuery que precisam ser unidos.
O método .add () adiciona os elementos selecionados ao conjunto de resultados:
É mais detalhado que
'.classA, .classB'
, mas permite criar seletores mais complexos, como o seguinte:fonte
Eu escrevi um plugin incrivelmente simples (5 linhas de código) para exatamente essa funcionalidade:
http://byrichardpowell.github.com/jquery-or/
Ele permite que você efetivamente diga "obtenha esse elemento ou, se esse elemento não existir, use esse elemento". Por exemplo:
Embora a resposta aceita forneça uma funcionalidade semelhante a esta, se os dois seletores (antes e depois da vírgula) existirem, ambos os seletores serão retornados.
Espero que seja útil para qualquer pessoa que possa acessar esta página via google.
fonte
"a" || "b"
vs.null || "b"
na baunilha JS. Se aplicarmos o mesmo comportamento aqui,$(a).or(b)
deve retornar$(a)
se existir, caso contrário, deve retornar$(b)
. Não acho que haja algo errado com essa nomenclatura, pois o "ou" corresponde ao comportamento do JS "||" (ou) operador.or
. Que outros estão falando é mais como umconcat
oumerge
ação.Se você deseja usar a construção padrão de element = element1 || element2, em que o JavaScript retornará o primeiro verdadeiro, você pode fazer exatamente isso:
que retornaria o primeiro elemento encontrado. Mas uma maneira melhor provavelmente seria usar a construção de vírgula do seletor jQuery (que retorna uma matriz de elementos encontrados) desta maneira:
que retornará o primeiro elemento encontrado.
Eu uso isso de tempos em tempos para encontrar um elemento ativo em uma lista ou algum elemento padrão, se não houver um elemento ativo. Por exemplo:
que retornará qualquer li com uma classe de ativo ou, se não houver, retornará apenas o último li.
Qualquer um vai funcionar. Existem possíveis penalidades de desempenho, pois o || interromperá o processamento assim que encontrar algo verdadeiro, enquanto a abordagem de matriz tentará encontrar todos os elementos, mesmo que já tenha encontrado um. Então, novamente, usando o || o construto pode ter problemas de desempenho se precisar passar por vários seletores antes de encontrar o que retornará, porque ele deve chamar o objeto principal do jQuery para cada um (eu realmente não sei se esse é um problema de desempenho ou não, parece lógico que poderia ser). Em geral, porém, eu uso a abordagem de matriz quando o seletor é uma string bastante longa.
fonte
Finalmente eu encontrei o hack como fazê-lo:
(seleciona div com classe
classA
ORclassB
com span filho direto)fonte
Daniel A. White Solution funciona muito bem para as aulas.
Eu tenho uma situação em que tive que encontrar campos de entrada como donee_1_card em que 1 é um índice.
Minha solução foi
Embora eu não tenha certeza de quão ideal é.
fonte