2010-04-02 10 views
0

Je veux revenir en arrière le menu de l'arbre d'une liste non ordonnée imbriquée au plus haut < li> et récupérer l'attribut "p_node" en utilisant la fonction toggle de jquery. Ainsi, par exemple, lorsque je clique sur "Annie", je veux récupérer la racine li, qui dans son cas est "mCat1" et extraire la valeur de "p_node" à utiliser dans le script. Comment puis-je accomplir cela? Merci de votre aide.jquery - Comment puis-je obtenir l'attribut de la racine, ou le plus haut < li > si je suis imbriqué profondément dans une liste non ordonnée

est Voici la liste non numérotée:

<ul id="nav> 
    <li type="root" p_node="39">Cat 2 
    <ul> 
     <li><a>sub cat2</a></li> 
    </ul> 
    </li> 
    <li type="root" p_node="40">mCat1 
     <ul> 
     <li>Subcat A 
      <ul> 
       <li>Subcat A.1 
        <ul> 
        <li><a>Annie</a></li> 
        </ul> 
       </li> 
      </ul> 
      </li> 
     </ul> 
    </li> 
</ul> 

est ici une partie de la jquery j'ai essayé. le sélecteur sélectionne le fond le plus < li> qui a une balise d'ancrage:

$('#nav li:not(:has(li))>a').toggle(function() { 
        //show stuff 
        var parentEls = $(this).parents() 
        .map(function() { 
        if($(this).attr('type') == 'root') 
        { 
        var node = $(this).attr('p_node'); 
        return node; 
        } 
      }); 
      }, function() { 
        //close stuff 
}); 

Répondre

4

Essayez ceci:

$(clickReceiver).parents("li:last").attr('p_node') 
+0

brillant! Fonctionne parfaitement. Merci de votre aide. – Ronedog

+0

N'est-ce pas jquery sympa? :) – morgancodes

+0

Les sélecteurs jQ * sont * brillants. Ils ont réussi à créer une sorte de "six degrés de séparation" entre chaque élément du DOM. – dclowd9901

2
$('#nav li:not(:has(li))>a').toggle(function() { 
    //show stuff 
    var parentEls = $(this).closest('li[type=root]').attr('p_node'); 
}, function() { 
    //close stuff 
}); 
+0

Ceci est plutôt dense, il serait utile si vous avez expliqué ce qui se passe ici. – Sorpigal

+1

Ce n'est pas dense, il essaie de fournir une réponse en utilisant le code de la question. Si vous extrayez la partie importante, cette réponse fait essentiellement la même chose que la réponse de morgancodes, sauf qu'il utilise les plus proches au lieu des parents et plus spécifiquement le 'li' avec' type = root' - '$ (clickReceiver) .closest (' li [type = root] '). attr (' p_node '); ' – Mottie

+0

merci à pertersendidit. Cela a bien fonctionné aussi ... appréciez votre aide. – Ronedog