2011-04-29 1 views
1

Quelle est la méthode la plus simple pour alterner les couleurs de l'élément de liste cloné? Chaque fois que je clique sur un lien, j'aimerais que l'élément de liste soit cloné et ajouté au bas de la liste, mais que tous les autres éléments de la liste aient une classe 'highlight' ajoutée.Utilisez jQuery pour cloner un élément de liste avec des couleurs secondaires lorsque vous cliquez sur le lien

C'est le lien vers Fiddle où j'ai tout fait excepté la partie de couleur alternante.

Voici un exemple comment html produit devrait ressembler à:

<ul> 
    <li>some text</li> 
    <li class="highlight">some text</li> 
    <li>some text</li> 
    <li class="highlight">some text</li> 
    <li>some text</li> 
    <li class="highlight">some text</li> 
</ul> 

Merci!

+0

Pourquoi ne pas simplement utiliser CSS pour mettre en valeur vos lignes? –

+0

Je suis d'accord, CSS aurait du sens, sauf si vous vouliez plus de flexibilité dans la couleur de chaque ligne impaire/paire – samccone

+0

J'ai besoin de plus de flexibilité avec la mise en évidence li. Avec la solution acceptée, je ne peux avoir cloné que highlited li tandis que avec la solution seule css la liste entière doit obtenir la couleur alternative li. – Klikerko

Répondre

3
<a href="#">Add More</a> 
<ul> 
    <li>some text</li> 
</ul>  

$('a').click(function() { 
    var link = $('ul li:first').clone(); 
    if($('ul li').length % 2 != 0) { 
     link.addClass("highlight"); 
    } 
    link.appendTo('ul'); 
    return false; 
}); 
+0

J'ajouterais peut-être une manipulation là-dedans au cas où une autre classe serait déjà présente dans l'appel '.attr'. +1 indépendamment :) –

+0

Avez-vous choisi .attr() sur .addClass()? juste curieux :) – Nic

+0

ahh ouais - le 'addClass' de la réponse de samccone serait plus approprié pour ajouter la classe. –

1

Voir cette updated fiddle. Fondamentalement, obtenir le dernier membre, voir s'il a mis en surbrillance, et basculer la classe de surbrillance.

$('a').click(function() { 
    var newNode = $('ul li:last').clone(); 
    newNode.toggleClass('highlight'); 
    newNode.appendTo('ul'); 
    return false; 
}); 
+0

Merci, cela fonctionne aussi. – Klikerko

3
$('#cloneli').click(function() { 
    $('#test li:first').clone().appendTo('ul'); 
    $('#test li:odd').addClass('highlight') 
}) 

est ici un working example.

+0

wow c'est vraiment une façon intelligente de faire les choses, hélas, il est limité dans la flexibilité – samccone

+0

Salut Hussein, votre code semble bien que la seule chose est qu'il duplique la liste entière à chaque clic. Vous venez de manquer pour ajouter ": first". Autre que cela ressemble à la meilleure solution jusqu'à présent. Merci! – Klikerko

+0

@klikerko, Si vous vérifiez mon post initial et jsfiddle, j'ai le ': first' là, mais plus tard édité, l'ai enlevé et je vous ai laissé choisir le' li' que vous voulez cloner. Quoi qu'il en soit, je le remets. – Hussein

Questions connexes