2009-06-08 21 views
89

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

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

Gracias,
Brendan

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

+1

¿podría publicar el código para que podamos ver por qué su selector principal no está funcionando? – TStamper

Respuesta

213

la mejor manera probablemente sería utilizar closest:

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

Check out the documentation:

obras

más cercanos, primero buscando en el elemento actual para ver si coincide con la expresión especificada, si es así, simplemente 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.

+0

Gracias .. Es realmente trabajo .... –

+0

¡funciona como un encanto! – frabiacca

+0

Gran jefe ...: p – chhameed

5

este fragmento ha realizado para mí en el pasado:.

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

post algo de código para nosotros para ver si podría haber otro problema en alguna parte ...

+0

Estoy de acuerdo con esto. Puedo usar '$ (this) .parent(). Parent()' sin problema – DrewT

20

se debe trabajar Usted puede también tratar $ (this) .parents (tag), donde tag es la etiqueta que desea buscar.

Por ejemplo:

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

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

1

Probé envolviendo $ (this) .parent() en un objeto jQuery como $ ($ (this) .parent()) A menudo encuentro la necesidad de hacer esto para asegurarme de tener un objeto jquery válido. A partir de ahí, podrá obtener el control de los padres o usar el prev() tal vez.

+8

Esto no tiene sentido. Todo lo que hace es perder el tiempo creando otro objeto jQuery ... – James

9

que debería funcionar ... usted puede tratar

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

El .parents (selector) dice consigue todos los antepasados ​​que coinciden con el selector de

y el: eq (1) dice encontrar el oneth (cero indexados, por lo que el segundo elemento) en la lista

+0

Puede intentar alertar sobre esto para asegurarse de que sea una etiqueta de anclaje html. Intente hacer: alert ('anchor html (' + $ (this) .html() + ')'); – Lathan

5

también tratar

$(this).closest('div.classname').hide(); 
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 es siempre la mejor opción, especialmente cuando se tiene mismo constructo elemento.

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

Usted puede hacer el padre de uno de los padres y es muy fácil:

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

etc.

2

Si tiene cualquier tipo de ID/clase para los padres, puede utilizar los padres (), sino que le dará todos los padres hasta que el cuerpo <> a menos que filtre() o detenerlo de alguna otra manera como

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

Espero que esto ayude a alguien :)

Cuestiones relacionadas