2010-01-24 4 views
0

J'ai un menu simple déroulant:en utilisant le contenu de balise <a> pour définir la classe li avec jquery

<ul id="nav" > 
<li><a href='/'>Parent One</a> 
<ul> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
</ul> 
</li> 
<li><a href='/'>Parent Two</a> 
<ul> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
</ul> 
</li> 

Je dois attribuer une classe à la < li> du parent qui est égale au nom du parent dans le tag a> <.

<ul id="nav" > 
<li class="ParentOne"><a href='/'>ParentOne</a> 
<ul> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
</ul> 
</li> 
<li class="ParentTwo"><a href='/'>ParentTwo</a> 
<ul> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
<li><a href='/'>child</a></li> 
</ul> 
</li> 

J'ai essayé ce morceau de code:

<script language="javascript" type="text/javascript"> 
$('#navigation ul li a').each(function(index) { 
var link = $(this); 
$('li', link.parent()).addClass(link.text()); 
}); 
</script> 

Mais qui applique la classe à < li> tag enfants et non le parent < li> - toute aide serait appréciée. Merci!

+0

pourrait vous s'il vous plaît modifier votre dernier bloc de code afin qu'il affiche tout le code? :) – Flatlin3

+0

mis à jour désolé à ce sujet! – Mel

Répondre

1

essayez ceci:

$(document).ready(function(){ 
    $('#nav>li>a').each(function(){ 
     $(this).parent().addClass($(this).text().replace(/\s/,'')) 
    }); 
}); 

:)

EDIT:Ne pas penser ... omg ... réparé :)

EDIT 2:Ajout blanc -space-coupe

EDIT 3:Modifié, ajouté document.ready $, 100% travaillant avec espace blanc coupe;)

+0

fermer, mais il renvoie class = "" - donc il ne saisit pas le contenu de la < a > – Mel

+0

où testez-vous? Je viens de tester et de retourner ce que je voulais :) Sry, ce que vous vouliez: D –

+0

oups désolé, mon erreur, copié mauvaise partie de votre réponse - a copié le résultat souhaité: D –

1

Cela devrait le faire:

$(document).ready(function() { 
    $('#nav > li > a').each(function(index) { 
     $(this).parent().addClass($(this).text()); 
    }); 
}); 

qui aussi seulement agir sur les éléments de niveau supérieur li; dans le cas où vous ajoutez des classes à d'autres éléments imbriqués plus profonds.

+0

Wow, vous me battre en seulement 22 secondes ... Sauf que votre exemple ne supprime pas les espaces – Harmen

+0

Ouais, j'étais un peu confus, car le second exemple donné n'a pas d'espaces dans le texte du lien ... –

3
$('#nav > li > a').each(function(){ 
    $(this).parent().addClass($(this).text().replace(/\s/, '')); 
}); 
0

Cela a fonctionné:

$("#nav li").each(function() { 
    $(this).addClass($(this).children("a").text()); 
}); 
Questions connexes