JQuery: Accès objet jquery d'origine dans chaque
Question
Je suis en train de mettre en œuvre le comportement du bouton radio HTML sur un ensemble de DIVs dans JQuery. Je veux supprimer la classe « set » de tous les éléments puis utilisez l'élément addClass () pour re-régler le (un) qui est cliqué:
$(".button").each(function() {
$(this).click(function(){
// what goes here to call removeClass() on *all* the elements?
$(this).addClass("set");
});
});
Je veux appeler removeClass () sur tous les éléments - dans ce cas $ ( "bouton "), mais je ne peux pas explicitement référence à $
(bouton".").Je ne peux pas appeler $ (bouton « « ). RemoveClass ( » set ») en dehors de la boucle que cela fait partie d'un programme plus grand et le comportement dans la boucle each () peut être modifié par d'autres paramètres.
Est-il possible d'accéder à l'ensemble des éléments à l'intérieur, ou les passer comme une variable? Ou est-il une autre façon d'aborder le problème?
La solution
Vous pouvez rechercher les nouveaux href="http://docs.jquery.com/Core/selector" , puisque vous faites un plugin:
jQuery.fn.test = function() {
console.log(this.selector); // .button
};
$('.button').test();
Autres conseils
Si vous ne pouvez pas coder en dur le sélecteur dans vos fonctions internes, jQuery pouvez revenir en fait la chaîne utilisée comme sélecteur dans l'appel initial. Voir $ ( 'bla') sélecteur.
Cela a été ajouté que dans la nouvelle version bien.
Cela semble inutilement complexe, il pourrait aider à obtenir une image plus claire de ce que vous essayez d'atteindre en fin de compte.
Dans votre boucle, vous pouvez chercher tout ce que vous aimez avec jquery $ ( « div ») // dans la boucle
Vous dites « mais je ne peux pas se référer à $ ( » bouton «) explicitement. ». Pourquoi?
$(".button").each(function() {
$(this).click(function(){
$('.button').removeClass('set'); // this should do it
$(this).addClass("set");
});
});
il suffit de changer:
$(".button").each(function() {
$(this).click(function(){
$('.button').removeClass("set");
$(this).addClass("set");
});
});
Je ne vois pas pourquoi ce serait un problème, un peu lent avoir à tirer .button chaque fois, mais c'est la seule façon contenant dans une boucle comme vous voulez.
toujours pas pourquoi vous ne pouvez pas faire référence $ ( «bouton ») de la fonction intérieure, mais pouvez-vous saisir les références dans une variable libre à la place?
var buttons = $(".button");
buttons.each(function() {
$(this).click(function(){
// what goes here to call removeClass() on *all* the elements?
buttons.removeClass('set');
$(this).addClass("set");
});
});
Je lui ai répondu à la question posée dans le corps du texte. Si vous souhaitez définir la classe de tous les autre élément qui est un frère, utilisez les frères et sœurs
intéressant parce que cela est dans la feuille de route sous radioClass ()
Qu'est-ce que vous voulez est frères et soeurs , et ne pas utiliser chacun pour définir l'événement de clic soit.
$(".button").click(function() {
$(this).addClass('set');
$(this).siblings('.button').removeClass('set');
});
Voir cet exemple ci-dessus en action: