Jak najít 2. nejbližšího předka v jQuery?

Můj DOM vypadá nějak takto:

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

Když použitý klikne na ‚Upravit‘, chci změnit vnější <li> do <li class="selected> .

Zkoušel jsem něco takového, ale nefunguje to:

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

Každá pomoc je oceňována.

Odpověď

Přejít o rodič:

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

Nefungovalo to, protože closest začíná aktuálním prvek, a tak pokud jej nazvete na něčem, co odpovídá selektoru, dostanete zpět to samé, s čím jste začali.

Živý příklad

Nebo můžete použít parents s :eq volič:

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

Všimněte si, že :eq používá indexy založené na 0, takže :eq(1) je druhá nadřazený li .

Živý příklad

Váš citovaný kód HTML je však neplatný (li nemůže přímo obsahovat li ); Předpokládám, že jste měl na mysli:

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

…nebo podobně.