Risposte:
Usa una virgola.
'.classA, .classB'
Puoi scegliere di omettere lo spazio.
AND
sarebbe .classA.classB
.
L'uso di una virgola potrebbe non essere sufficiente se si hanno più oggetti jQuery che devono essere uniti.
Il metodo .add () aggiunge gli elementi selezionati al set di risultati:
// classA OR classB
jQuery('.classA').add('.classB');
È più dettagliato di '.classA, .classB'
, ma consente di creare selettori più complessi come il seguente:
// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));
Ho scritto un plugin incredibilmente semplice (5 righe di codice) proprio per questa funzionalità:
http://byrichardpowell.github.com/jquery-or/
Ti permette di dire efficacemente "ottieni questo elemento, o se quell'elemento non esiste, usa questo elemento". Per esempio:
$( '#doesntExist' ).or( '#exists' );
Mentre la risposta accettata fornisce funzionalità simili a questa, se esistono entrambi i selettori (prima e dopo la virgola), entrambi i selettori verranno restituiti.
Spero che si riveli utile a chiunque possa atterrare su questa pagina tramite Google.
"a" || "b"
vs. null || "b"
in vaniglia JS. Se applichiamo lo stesso comportamento qui, $(a).or(b)
dovrebbe tornare $(a)
se esiste, altrimenti dovrebbe tornare $(b)
. Non credo che ci sia nulla di sbagliato in questa nomenclatura, in quanto "o" corrisponde al comportamento di JS "||" (o) operatore.
or
. Quello di cui stanno parlando gli altri è più simile a un'azione concat
o merge
.
Se stai cercando di usare il costrutto standard di element = element1 || element2 dove JavaScript restituirà il primo che è vero, potresti fare esattamente questo:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
che restituirebbe il primo elemento effettivamente trovato. Ma un modo migliore sarebbe probabilmente usare il costrutto virgola del selettore jQuery (che restituisce una matrice di elementi trovati) in questo modo:
element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];
che restituirà il primo elemento trovato.
Di tanto in tanto lo trovo per trovare un elemento attivo in un elenco o un elemento predefinito se non è presente alcun elemento attivo. Per esempio:
element = $('ul#someList').find('li.active, li:first')[0]
che restituirà qualsiasi li con una classe di attivo o, se non ce ne sono, restituirà solo l'ultimo li.
O funzionerà. Ci sono potenziali penalità di prestazione, tuttavia, come il || interromperà l'elaborazione non appena troverà qualcosa di vero mentre l'approccio array proverà a trovare tutti gli elementi anche se ne ha già trovato uno. Poi di nuovo, usando il || il costrutto potrebbe potenzialmente avere problemi di prestazioni se deve passare attraverso diversi selettori prima di trovare quello che restituirà, perché deve chiamare l'oggetto jQuery principale per ognuno (non so davvero se questo è un hit delle prestazioni o no, sembra logico che potrebbe essere). In generale, tuttavia, utilizzo l'approccio array quando il selettore è una stringa piuttosto lunga.
Daniel A. White Solution funziona alla grande per le lezioni.
Ho una situazione in cui ho dovuto trovare campi di input come donee_1_card dove 1 è un indice.
La mia soluzione è stata
$("input[name^='donee']" && "input[name*='card']")
Anche se non sono sicuro di quanto sia ottimale.