2010-09-03 14 views
8

Mi objeto jQuery se ve así:jQuery.find() ignora nodo raíz

var myJq = jQuery("<div class='a'></div><div class='b'></div>") 

myJq.find(".a") devuelve un objeto jQuery vacío, al parecer porque find() busca solamente en los niños de los nodos contenidos en un objeto jQuery, no los nodos mismos.

¿Cómo puedo tomar uno de los divs en myJq usando un selector?

Respuesta

14

En su lugar, necesita usar .filter().

Esto filtrará a través de elementos en el nivel superior del objeto jQuery.

myJq.filter(".a") 
+0

Impresionante. ¡Gracias! – morgancodes

+0

@morgancodes - De nada. : o) – user113716

1

Puede utilizar .filter()

var div = myJq.filter('.a'); 

o (mejor, más rápido) utilizan .first()

var div = myJq.first('.a'); 

Benchmark

var myJq = jQuery("<div class='a'></div><div class='b'></div>") 
var loop = 20000; 

console.time('filter'); 
while(loop--){ 
    var blah = myJq.filter(".a"); 
} 
console.timeEnd('filter'); 

loop = 20000; 

console.time('first'); 
while(loop--){ 
    var blah = myJq.first(".a"); 
} 
console.timeEnd('first'); 

.first() es aproximadamente 8 veces más rápido para mí.

+0

Verdadero. Asir por índice sería más rápido que por selector, pero más frágil/mayor mantenimiento si la estructura cambia. +1 – user113716

+3

'.first()' no funciona como crees. Intenta hacer 'myJq.first ('. B')' para ver a qué me refiero. '.first()' es simplemente el método de azúcar para '.eq (0)' –

+0

En otras palabras, el argumento que pasa se ignora. –

Cuestiones relacionadas