Risposte:
Utilizzando un normale selettore CSS:
$('.sys input[type=text], .sys select').each(function() {...})
Se non ti piace la ripetizione:
$('.sys').find('input[type=text],select').each(function() {...})
O più concisamente, passa l' contextargomento:
$('input[type=text],select', '.sys').each(function() {...})
Nota: internamente jQueryconvertirà quanto sopra in find()equivalente
Internamente, il contesto del selettore è implementato con il metodo .find (), quindi $ ('span', this) è equivalente a $ (this) .find ('span').
Personalmente trovo che la prima alternativa sia la più leggibile :), la tua opinione però
$chiamata sono così importanti per la tua app, evita del tutto di usare jQuery :). Questa risposta ha cercato di rispondere alla domanda di OP, se fosse stata una questione di prestazioni, questa risposta non sarebbe qui in primo luogo. Grazie comunque per il commento :), lo apprezzo
$chiamata, ma tutte le $chiamate presenti in una sola applicazione. IMO, quando hai modi diversi di fare la stessa cosa, cerco di scegliere sempre quello che si comporta meglio bc. slow performance=== unhappy users. Inoltre, possiamo entrambi rispondere alla domanda di un OP con più risposte (come hai fatto tu) e fornito vantaggi / inconvenienti di ciascuna di esse (come ho fatto io nel commento). IMO è importante notare perché tutte le risposte sono diverse, pur fornendo lo stesso risultato. Inoltre, possiamo scrivere codice JavaScript vanilla che funzioni lentamente JavaScriptperformance
$, classifica i tuoi div in modo specifico e usa document.getElemenById/ElementsByClassName, piuttosto che passare attraverso il $controllo / analisi delle stringhe del tuo selettore, jQuery non è famoso per la sua libreria performante. E onestamente non ho visto un'app rallentare a causa di chiamarne $una di troppo, se hai un sito web che ha questo problema, per favore mostramelo, sono molto interessato :)
$('.sys').children('input[type=text], select').each(function () { ... });
EDIT: In realtà questo codice sopra è equivalente al selettore di bambini .sys > input[type=text]se vuoi che il discendente select ( .sys input[type=text]) devi usare le opzioni fornite da @NiftyDude.
Maggiori informazioni:
chilreninvece dichildren
Se hai più input come testo in un modulo o una tabella che devi scorrere, ho fatto questo:
var $list = $("#tableOrForm :input[type='text']");
$list.each(function(){
// Go on with your code.
});
Quello che ho fatto è stato controllare ogni input per vedere se il tipo è impostato su "text", quindi prenderà quell'elemento e lo memorizzerà nell'elenco jQuery. Quindi, itererà attraverso quell'elenco. Puoi impostare una variabile temporanea per l'iterazione corrente in questo modo:
var $currentItem = $(this);
Questo imposterà l'elemento corrente sull'iterazione corrente del tuo per ogni ciclo. Quindi puoi fare quello che vuoi con la variabile temp.
Spero che questo aiuti chiunque!
$('input[type=text],select', '.sys');
per il loop:
$('input[type=text],select', '.sys').each(function() {
// code
});
context formsta usandofind form,find formè più efficiente dicontext form(una funzione chiamata evitata). Questo è valido per quasi tutti i selettori utilizzati. Quindi, IMO thefind formè più efficiente dinormal CSS selector, perché entrambe le parti del selettore sono relative al nodo radice, dove infind form, solo la.sysparte è relativa ad esso, quindiinput[type=text],selectviene eseguita su un insieme di elementi molto più piccolo quindi potrebbe essere più veloce (ma è necessario che questo sia verificato dai test)