2011-03-02 13 views
7

Mi DOM es como la siguiente:jquery: cómo encontrar el segundo anscestor más cercano?

<li> 
    <li><a class="editEntity>Edit</a></li> 
    <li><a class="deleteEntity>Delete</a></li> 
</li> 

Cuando los clics utilizados en 'Editar', que quieren cambiar el exterior <li> to <li class="selected>.

I tried something like this, but this is not working: 
    $('li a.editEntity').live('click', function() { 
     $(this).closest('li').closest('li').addClass('selected'); 
    }); 

Cualquier ayuda se agradece.

+0

bucle en todos los niños y detener (y aplicar lo que desee) en el segundo hijo. Me gustaría echar un vistazo al ejemplo de. (De cada uno) de jquery's. Psot debajo de –

Respuesta

13

Sube por uno de los padres:

$(this).closest('li').parent().closest('li').addClass('selected'); 

No trabajó por encontrarse closest se inicia con la corriente elemento , y por lo que si usted lo llama en algo que coincide con el selector, a volver lo mismo empezaste con

Live example

O puede utilizar parents con el :eq selector:

$(this).parents("li:eq(1)").toggleClass("selected"); 

Tenga en cuenta que utiliza :eq 0 basados ​​en índices, por lo :eq(1) es el padre segundoli.

Live example

Su HTML citado no es válido, aunque (un lican't directly contain an li); Supongo que se refería a:

<li> 
    <ul> 
     <li><a class="editEntity>Edit</a></li> 
     <li><a class="deleteEntity>Delete</a></li> 
    </ul> 
</li> 

... o similar.

0

después de mi comentario anterior .. aquí está el ejemplo prometido ... :)

$('li').each(function(index) { 
    alert(index + ': ' + $(this).text()); 
    }); 

Parar en el segundo índice

Más información se puede encontrar aquí

http://api.jquery.com/each/

1

puede usar

$('li a.editEntity').live('click', function() { 
    $(this).parents('li').addClass('selected'); 
}); 
+1

. Esto lo agregará a * todos * los '' '' primarios, incluido el padre inmediato de 'a'. –

Cuestiones relacionadas