2014-09-12 2 views
2

J'ai cette partie HTML:Comment obtenir l'élément parent?

<div id="menu"> 
    <ul> 
     <li><a href="/">Startseite</a></li> 
     <li class="active"><a href="/pacmodule/glass">Brillengl&#228;ser</a></li> 
     <li><a href="/pacmodule/completeglass">Komplettbrille</a></li> 
     <li><a href="/t/Comingsoon">Sportbrillen</a></li> 
     <li><a href="/PacCategoryRedirect/0">Marketing</a></li> 
     <li><a href="/customer/statistics">Statistik</a></li> 
    </ul> 
</div> 

Je veux supprimer class = paramètre "actif" et réglez dans la balise li où je href = "/ pacmodule/completeglass" atribute.

Première partie que j'ai fait avec succès jquery:

$("#menu").find("ul:first").find(".active").removeClass("active"); 

Mais j'ai des problèmes avec la deuxième partie. Cette sélection juste un tag:

$('a[href="/pacmodule/completeglass"]').parent().html(); 

Et tout cela balise ul:

$('a[href="/pacmodule/completeglass"]').parent().parent().html(); 

Comment puis-je mettre attribut class = "actif" dans la balise li où href = "/ pacmodule/completeglass"

Merci de votre aide.

Répondre

1

Vous n'avez pas besoin des appels html(). Ils retournent juste le innerHTML comme une chaîne. Vous comptiez que renverrait le outerHTML (pour la outerHTML utiliser quelque chose comme ...parent()[0].outerHTML)

Essayez ceci:

$('a[href="/pacmodule/completeglass"]').closest('li').addClass('active'); 

Il trouvera l'ancre sur la base href = «/pacmodule/completeglass », puis trouver l'ancêtre le plus proche qui est LI, puis ajoutez la classe active.

closest est le moyen le plus utile pour trouver un ancêtre d'un type spécifique. Il est préférable d'utiliser parent() car closest fait face à la modification de la structure HTML.

Note: Si vous expliquez l'objectif général, il peut y avoir de meilleures façons de le faire que de chercher le lien href :)

Mise à jour

Vous ne voulez pas supprimer le précédent sélection avec ce qu'il est trop spécifique:

$("#menu").find("ul:first").find(".active").removeClass("active"); 

essayer ceci:

$("#menu li.active").removeClass("active"); 
+0

thats it! Merci beaucoup! – Korl

+1

@Korl: Pas de problème. Si vous n'avez pas besoin de plus amples informations, veuillez accepter comme réponse/upvote. Vous avez maintenant assez d'évaluation :) –

0
$("#menu").find("ul:first").find(".active").removeClass("active"); 

Cela peut être plus efficace d'écrire comme:

$("#menu").find("li.active").removeClass("active"); 

Ensuite, les DOM ne avez pas besoin de rechercher une ul, au lieu, il va directement à la classe .active

+0

Pourquoi ne pas simplement '$ (" # menu li.active "). RemoveClass (" active ");'? J'ai déjà couvert ça. Cette réponse ne répond pas vraiment à la question posée, donc aurait dû être un commentaire. À votre santé. –

+0

oui, n'a pas vu votre édition, mais OFC. WP @TrueBlueAussie –

0

.closest()

$("li").removeClass("active").find($('a[href="/pacmodule/completeglass"]')).closest('li').addClass('active'); 

DEMO

0

facilement faire cela (dans votre document js):

0

pourquoi ne pas essayer:

$("#menu").find("ul:first").find(".active").removeClass("active"); 
$('a[href="/pacmodule/completeglass"]').parent().addClass("active"); 

vous pourriez vouloir vérifier cette fiddle