2011-10-04 12 views
51

Tengo que .unbind() todos los elementos de un nodo primario.¿Cómo seleccionar TODOS los niños (en cualquier nivel) de un padre en jQuery?

¿Cómo puedo seleccionar todos los hijos (en cualquier nivel) de un padre?

intentado:

$('#google_translate_element *').unbind('click'); 

pero funciona sólo para el nivel de los primeros niños ...

Here no es un caso de prueba

+0

¿Tiene un caso de prueba que demuestra esto? – lonesomeday

+2

¿No puedes simplemente hacer $ ('# google_translate_element'). Find ('*'). Unbind ('click'); – rickyduck

Respuesta

100

Uso jQuery.find() encontrar niños más de un nivel profundo.

El .find() y .children() métodos son similares, excepto que el último sólo se desplaza un solo nivel por el árbol DOM.

$('#google_translate_element').find('*').unbind('click'); 

Se necesita el '*' en find():

Al contrario que en el resto de los métodos de recorrido de árbol, se requiere que el selector de expresión en una llamada a .find(). Si necesitamos recuperar todos los elementos descendientes, podemos pasar el selector universal '*' para lograr esto.

+0

estoy usando esto ahora pero ¿tengo que preocuparme por el rendimiento? – ProblemsOfSumit

+1

Sí, por supuesto. Siempre debe preocuparse por el rendimiento. Los navegadores modernos serán bastante rápidos de ejecutar, pero si se encuentra con problemas para este fragmento específico, trate de mantener el elemento padre pequeño (no demasiados hijos) o agrupe a los niños en conjuntos más pequeños. – Konerak

16

creo que se podría hacer:

$('#google_translate_element').find('*').each(function(){ 
    $(this).unbind('click'); 
}); 

pero sería causar una gran cantidad de gastos generales

Cuestiones relacionadas