jQuery padre de un padre

93

Actualmente estoy tratando de encontrar el padre de un padre de un elemento. Tengo un enlace en el que se hace clic que está en a <td>, y me gustaría obtener el <tr>objeto.

¿Por qué no funciona "$ (this) .parent (). Parent ()"? ¿Qué será?

Gracias,
Brendan

Editar: Parece que un error en mi sintaxis estaba arruinando todo. "$ (this) .parent (). parent ()" de hecho funciona, pero terminé yendo con $ (this) .closest ('tr') "porque parece la solución más eficiente.

bloudermilk
fuente
1
¿Podría publicar el código para que podamos ver por qué su selector principal no funciona?
TStamper

Respuestas:

221

La mejor manera probablemente sería usando closest:

$(this).closest('tr');

Consulte la documentación :

Más cercano funciona mirando primero el elemento actual para ver si coincide con la expresión especificada, si es así, solo devuelve el elemento en sí. Si no coincide, continuará recorriendo el documento, padre por padre, hasta que se encuentre un elemento que coincida con la expresión especificada. Si no se encuentra ningún elemento coincidente, no se devolverá ninguno.

Paolo Bergantino
fuente
20

Deberia de funcionar. También puede probar $ (this) .parents (etiqueta), donde etiqueta es la etiqueta que desea encontrar.

Por ejemplo:

$(this).parents("tr:first")

Encontrará el tr más cercano "en la cadena".

Philippe Leybaert
fuente
9

Eso debería funcionar ... podrías intentar

$(this).parents(':eq(1)');

El .parents (selector) dice obtener todos los ancestros que coincidan con el selector

y el: eq (1) dice encontrar el primer elemento (indexado a cero, entonces el segundo) elemento en la lista

Lathan
fuente
Puede intentar alertar esto, para asegurarse de que sea una etiqueta de anclaje HTML. Intente hacer: alert ('anchor html (' + $ (esto) .html () + ')');
Lathan
6

Este fragmento me ha funcionado en el pasado:

$(this).parent().parent(); 

Publique algún código para que veamos si puede haber otro problema en alguna parte ...

Gabriel Hurley
fuente
Estoy de acuerdo con ésto. Puedo usar $(this).parent().parent()sin problema
DrewT
5

intenta también

$(this).closest('div.classname').hide();
Dilip
fuente
2

Si tiene algún tipo de identificación / clase para el padre, puede usar parent () pero eso le dará a todos los padres hasta el <cuerpo> a menos que filtre () o lo detenga de alguna otra manera como

$(this).parents('.myClass');

Espero que esto ayude a alguien :)

abhilashv
fuente
1

Intente envolver $ (this) .parent () en un objeto jQuery como $ ($ (this) .parent ()) A menudo encuentro la necesidad de hacer esto para asegurarme de que tengo un objeto jquery válido. A partir de ahí, debería poder comunicarse con los padres, o quizás usando prev ().

kristian nissen
fuente
8
Esto es completamente inútil. Todo lo que estás haciendo es perder el tiempo creando otro objeto jQuery ...
James
1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}
Alex Polo
fuente
0

.closest() no siempre es la mejor opción, especialmente cuando tiene la misma construcción de elementos.

<div>
    <div>
        <div>
        </div>
    </div>
</div>

Puedes hacerlo padre de un padre y es muy fácil:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

etc.

Webapper
fuente