J'aurais fait ça :
<div id="co">
<a href="#" class="btn red" data-text-on="Activer" data-text-off="Désactiver">Désactiver</a>
</div>
<div id="co2">
<a href="#" class="btn red" data-text-on="Bonjour" data-text-off="Au revoir">Au revoir</a>
</div>
<script type="text/javascript">
jQuery(function($) {
$('.btn').on('click', function(e) {
var $elem = $(this);
if($elem.hasClass('red')) {
$elem.removeClass('red').addClass('green');
$elem.text($elem.attr('data-text-on'));
}
else {
$elem.removeClass('green').addClass('red');
$elem.text($elem.attr('data-text-off'));
}
e.preventDefault();
});
});
</script>
Et le fiddle d'exemple : http://jsfiddle.net/prbaron/QYst4/1/.
@Coloo, merci pour la précision, c'est pas une bonne idée d'aider les gens un vendredi soir, je suis pas efficace :).
@Nakor404 : J'ai mis des attributs au lien plutôt que directement le texte dans le JS pour avoir plus de flexibilité. Ton JS devient réutilisable pour d'autres éléments. De la même manière un e.preventDefault() est plus approprié qu'un return false.
Le return false effectue un preventDefault() qui permet de bloquer l'action par défaut de l'élément (ici de rediriger vers le lien indiqué), ainsi qu'un stopPropagation(), qui permet de supprimer la propagation de l'évènement click à des éléments parents dans le DOM. Cela peut être néfaste pour du code futur.