¿Existe alguna forma mejor de seleccionar elementos abuelos en jQuery para evitar esto?jQuery: selección de abuelos
$(this).parent().parent().parent().parent().parent().children(".title, .meta").fadeIn("fast");
Thanks.
¿Existe alguna forma mejor de seleccionar elementos abuelos en jQuery para evitar esto?jQuery: selección de abuelos
$(this).parent().parent().parent().parent().parent().children(".title, .meta").fadeIn("fast");
Thanks.
Usted puede utilizar el método parents()
que coincide con los padres en contra de un selector de
http://api.jquery.com/parents/
O si usted está utilizando 1.4 hay un nuevo método parentsUntil()
Uso del parents()
selector para obtener todos los padres de un elemento. Luego puede buscar en la colección o iterar sobre ella si desea afectar a todos los antepasados.
Además de parents()
, como ya han dicho, también debe check out closest()
. Lea la comparación en la documentación allí, pero sus diferencias principales son que busca solo un resultado, e incluye $(this)
en lo que busca (podría obtener lo que está buscando si no es lo suficientemente específico). Pros y contras.
Escribí este plugin simple porque pensé que tenía una selección de clase inequívoca en alguna parte que me daba errores. La selección de abuelos parecía más directa que $().parents()
para este caso en particular.
Bueno, usé esto una vez y me di cuenta de que en realidad tenía un error de ortografía. No estoy seguro de lo útil que realmente es. $('myelem').gparent(2);
te consigue el abuelo de 'myelem'.
(function($){
$.fn.gparent = function(recursion){
if(recursion == undefined) recursion = 2;
if(typeof(recursion) == "number"){
recursion = parseInt(recursion);
if(recursion > 0){
gparent_holder = $(this);
for(var gparent_i = 0; gparent_i < recursion; gparent_i++){
gparent_holder = gparent_holder.parent();
}
return gparent_holder;
}
else return false;
}
else return false;
}
})(jQuery);
Me gusta esta solución. Estamos interesados en jQuery> 2.0 y aún no existe una manera clara y directa de navegar por los niveles 'k'. Parece una cosa trivial para agregar al marco base. –
bueno para traer recursividad. Una función recursiva es una gran solución para problemas como estos ... sin embargo, su solución no es recursiva. Publiqué un fragmento recursivo como respuesta a esta pregunta – patrick
@Femi tenía una respuesta a ello, y recursividad menciona, sin embargo, su solución no era recursiva, he aquí una solución recursiva jQuery para conseguir ancestros de un elemento:
$.fn.gparent = function(recursion){
console.log('recursion: ' + recursion);
if(recursion > 1) return $(this).parent().gparent(recursion - 1);
return $(this).parent();
};
Si esta es tu HTML:
<div id='grandparent'>
<div id='parent'>
<div id='child'>
child
</div>
</div>
</div>
puede llamar
console.log($('#child').gparent(2));
para obtener el abuelo del elemento child
. Here's the JSFiddle
¿por qué se obtiene un voto negativo sin comentario ... es recursivo, está documentado, se proporciona un violín para mostrar que funciona, y es la respuesta a la pregunta del OP ... . SO debería hacer que sea imposible rechazarlo sin una explicación. ¡Ahora una solución que funciona perfectamente (que uso mucho!) No se muestra como válida ... – patrick
y qué hay de children(). Children(). Children(). Children (". Title")? – aneuryzm
No pude resistir, puede usar $ (this) .gparent (2) con el código proporcionado en mi respuesta downvoted. No sé por qué está downvoted, ya que es la solución que responde a su pregunta ... – patrick