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.


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.


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".


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


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 ...


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

5

intenta también

$(this).closest('div.classname').hide();

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 :)


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 ().


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; 
}

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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.