Multiple selector chaining in jQuery?

Normalmente quando uso una class come selettore cerco di utilizzare un selettore “id” con esso in modo che non ricerchi l’intera pagina ma solo un’area in cui si trova la class.

Tuttavia ho una vista parziale con il codice in esso. Questa vista parziale (codice comune) viene avvolta attorno a un tag modulo.

Io ho:

// load common code in from partial view
// load common code in from partial view

Ora in questo codice comune ho bisogno di colbind un plugin a più campi, quindi lo farei

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

Quindi è praticamente lo stesso codice. Mi chiedo se c’è un modo per farlo cercare uno dei due id?

modificare

Sto avendo problemi con questo quando ho variabili per i miei selezionatori

  my.selectors = { A: '#Create', B: '#Edit', Plugin: ' .Plugin' }; $(selector.A+ selectors.Plugin, selector.B+ selectors.Plugin) 

Non sembra funzionare.

Puoi combinare più selettori con una virgola:

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

Oppure, se ne hai un sacco, puoi aggiungere una class a tutti i tuoi elementi del modulo e poi cercare all’interno di quella class. Questo non ti dà il presunto risparmio di velocità di limitare la ricerca, ma onestamente non mi preoccuperei troppo di questo se fossi in te. I browser fanno un sacco di cose stravaganti per ottimizzare le operazioni comuni dietro la schiena: il semplice selettore di class potrebbe essere più veloce.

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

Utilizzare $.fn.add per concatenare due set.

Dovresti essere in grado di usare:

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

jQuery | Selettori multipli

Penso che potresti vedere prestazioni leggermente migliori in questo modo:

 $("#Create, #Edit").find(".myClass").plugin(){ // Options }); 

piace:

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

È ansible specificare qualsiasi numero di selettori da combinare in un singolo risultato. Questo combinatore di espressioni multiple è un modo efficace per selezionare elementi disparati. L’ordine degli elementi DOM nell’object jQuery restituito potrebbe non essere identico, poiché saranno nell’ordine del documento. Un’alternativa a questo combinatore è il metodo .add ().

  • Selettore multiplo
  • Aggiungi metodo

Ci sono già ottime risposte qui, ma in alcuni altri casi (non questo in particolare) l’uso della mappa potrebbe essere la “sola” soluzione.

Specialmente quando vogliamo usare espressioni regolari diverse da quelle standard.

Per questo caso sarebbe simile a questo:

  $('.myClass').filter(function(index, elem) { var jElem = $(elem); return jElem.closest('#Create').length > 0 || jElem.closest('#Edit').length > 0; }).plugin(...); 

Come ho detto prima, qui questa soluzione potrebbe essere inutile, ma per ulteriori problemi, è un’opzione molto buona