2011-09-30 9 views
7

Sto usando questo selettore $("textarea #myTextArea").val(text); e non funziona. Se rimuovo l'ID e utilizzo la classe funziona. Perché jquery non è in grado di trovare l'elemento qui?Come utilizzare il selettore jquery con tipo di elemento e ID

+4

Cordiali saluti, solo l'id è ottimizzato in jQuery - vi sarà rallentare il selettore notevolmente –

+0

Daniel è giusto, si dovrebbe usare $ ("myTextArea") al posto del tuo selettore. Utilizza direttamente getElementById() di javascript, quindi è veloce ed efficiente. Quando si utilizza il selettore, lo script selezionerà tutti gli elementi (in questo caso le aree di testo) e itererà attraverso di essi finché non troverà quello giusto. – Przemek

+0

Sì, ma non posso farlo perché lo stesso ID è usato altrove, dove, nella stessa pagina, so che è terribile, ma devo conviverci. – Manoj

risposta

26

A causa dello spazio. Con lo spazio si dice il #myTextArea all'interno di un textarea.

$("textarea#myTextArea").val(text); 
+1

"textarea" non è solo ridondante. È circa l'80% più lento. Qui, ho creato un test: http://jsperf.com/jquery-selector-performance-test123 – Alex

4

Basta rimuovere lo spazio:

$("textarea#myTextArea").val(text); 

Al momento si sta cercando di selezionare un elemento con ID myTextArea che è un elemento discendente di una textarea

Come Jared Farrish menziona nei commenti rimozione il tipo di elemento sarebbe più efficiente:

$("#myTextArea").val(text); 

Se il documento è valido, ogni ID verrà utilizzato una sola volta questo è ancora corretto.

+0

Oppure rimuovere 'textarea' del tutto. –

+3

Per chiarire @Manoj, quando si utilizza uno spazio, si tenterà di selezionare gli elementi con l'ID myTextArea che sono * discendenti * della propria area di testo. – Kasaku

+0

@PirateKitten +1 Ho modificato la risposta per riflettere che – Clive

Problemi correlati