2010-07-09 3 views
4

Le HTML ressemble à ceci:jQuery - trouver 1er élément avec une classe spécifique d'en haut, mais pas avant un autre élément

<li class="divider"> 
    <div> 
    ...(maybe more divs)...  
     <div class="content"> 
     ...(maybe more divs)... 
     <a href="#" class="link">LINK</a> 

... 

comment puis-je choisir la DIV .content, à partir d'une fonction jQuery accroché sur le lien? Notez que j'ai plusieurs listes comme ceci, et dans certains d'entre eux div.content pourrait être manquant, ainsi je veux sélectionner cette div seulement si elle existe dans le bloc courant (li.divider).

J'ai essayé avec $link.parent().parent().find('content') mais il échoue dans certains cas, parce que le nombre d'éléments entre ces 2 éléments peuvent changer ...

+0

Pourquoi pas un seul ouvrage 'li.divider de div.content'? –

+0

parce qu'il y a plusieurs choses li.divider sur la page – Alex

Répondre

5

Si elles ne sont pas imbriqués, vous devriez être en mesure de le faire:

$('a.link').click(function() { 
    $(this).closest('div.content'); 
}); 

ou

$('a.link').click(function() { 
    $(this).parents('div.content:first'); 
}); 

Si elles sont imbriquées, alors vous devrez peut-être faire quelque chose comme ceci:

$('a.link').click(function() { 
    $(this).closest('li.divider').find('div.content'); 
}); 

... de sorte que s'il y a imbrication en cours, et il n'y a pas div.content dans l'actuel, vous ne serez pas finir par la sélection d'un ancêtre div.content plus lointain.

+0

merci, le dernier fonctionne: D – Alex

0

$link.parent(".content")?

0

Utilisez le sélecteur closest ...

var parentContent = $(this).closest("div.content"); 

if(parentContent.length > 0) { 
    alert("DIV was found!"); 
} 
Questions connexes