2009-11-27 4 views
0

Ce que je fais est d'ajouter une classe à tous les éléments qui ont le même nom de classe que l'identifiant que je suis en train de planer. Par exemple lorsque je survole un élément de la liste avec l'id de la voyelle, alors tous les éléments span avec la classe du nom voyelle sont traités (en ajoutant une classe).Refactoring et séchage du code jQuery

Je peux le faire sans problèmes. Mais je veux faire la même chose pour beaucoup d'autres noms d'id avec les noms de classe correspondants. Exemples: consonnes, semi-voyelles, gutturals, palatals, etc.

Je pourrais faire tout cela avec des fonctions différentes mais je veux faire est d'appeler une fonction qui effectuera les mêmes tâches mais sera assez intelligent pour trouver le nom de l'ID et générer le nom de la classe à partir de celui-ci.

Comment puis-je extraire le nom de l'identifiant dans une variable et l'affecter au nom de la classe.

+0

J'ai le sentiment que ce même effet peut être grandement simplifiée en utilisant seulement CSS ou seulement ajouter une classe à l'élément qui encapsule ces enfants. S'il vous plaît poster votre code HTML et la structure afin que je puisse élaborer. – duckyflip

+0

Merci d'avoir regardé dedans mais Cletus l'a résolu. Je ne pense pas que HTML/CSS aurait pu le faire seul. – allesklar

Répondre

1

Vous pouvez le faire:

$("[id]").hover(function() { 
    $("." + this.id).addClass("highlight"); 
}, function() { 
    $("." + this.id).removeClass("highlight"); 
}); 

mais je ne recommanderais pas nécessairement. Je serais plus enclin à le définir statiquement:

var ids = ["vowels", "consonants"]; 
for (var i = 0; i < ids.length; i++) { 
    $("#" + ids[i]).hover(function() { 
    $("." + this.id).addClass("highlight"); 
    }, function() { 
    $("." + this.id).removeClass("highlight"); 
    }); 
} 

ou quelque chose comme ça.

+0

Je travaille presque mais le "." + ids [i] bit ne fait rien. Sur la ligne 3 de votre code, j'ai testé ce code et cela fonctionne: $ (this) .css ({'cursor': 'default'}); mais pour une raison quelconque, sur la même ligne ce qui suit ne fonctionne pas: $ ("#" + ids [i]). Css ({'cursor': 'default'}); J'espère que cela vous donnera un indice sur la façon de m'aider davantage. – allesklar

+0

ligne 3 de votre deuxième solution – allesklar

+0

bien je voulais dire la ligne 4 (QUATRE) de votre deuxième extrait de code. – allesklar

2

Vous pouvez utiliser un plug-in:

$.fn.highlight = function() { 
    return this.each(function() { 
     $(this).hover(function() { 
      var id = $(this).attr('id'); 
      $('.'+id).addClass('myclass'); 
     }); 
    }); 
} 

que vous pourriez appeler comme ceci:

$(document).ready(function() { 
    $('span').highlight(); 
}); 
+0

Merci Steerpike. J'ai utilisé une partie de votre solution avec une partie de la solution Cletus pour la faire fonctionner. À votre santé. – allesklar