Domanda

Sto cercando di attuare un comportamento pulsante di scelta HTML su una serie di div in jQuery. Voglio rimuovere la classe di "set" da tutti gli elementi quindi utilizzare addClass () per re-impostare la (uno) elemento che si fa clic:

$(".button").each(function() {
  $(this).click(function(){
    // what goes here to call removeClass() on *all* the elements?
    $(this).addClass("set");
  });
});

Voglio chiamare removeClass () su tutti gli elementi - ( "bottone "), in questo caso $, ma non posso fare riferimento a $ esplicitamente

(" bottone".).

Non posso basta chiamare $ ( "pulsante '). RemoveClass (' set") al di fuori del circuito come questo è parte di un programma più grande e il comportamento all'interno del ciclo ciascuna () può essere modificato da altri parametri.

C'è un modo per accedere al set completo di elementi da dentro, o passarli in una variabile? O c'è un altro modo per affrontare il problema?

È stato utile?

Soluzione

Si può essere alla ricerca di nuovi href="http://docs.jquery.com/Core/selector" , dal momento che si stanno facendo un plugin:

jQuery.fn.test = function() {
    console.log(this.selector); // .button
};

$('.button').test();

Altri suggerimenti

Se non è possibile hard-code il selettore nelle funzioni interne, jQuery può effettivamente restituire la stringa utilizzata come selettore nella chiamata originale. Vedere $ ( 'bla'). Selettore

Questo è stato aggiunto solo nella versione più recente però.

Questo sembra inutilmente complessa, potrebbe essere utile per avere un quadro più chiaro di ciò che si sta in ultima analisi, cercando di ottenere.

All'interno del vostro ciclo è possibile recuperare ciò che ti piace con jQuery $ ( "div") // all'interno del ciclo

Si dice "ma non posso fare riferimento a $ (". Pulsante ") in modo esplicito.". Perché?

$(".button").each(function() {
  $(this).click(function(){
    $('.button').removeClass('set'); // this should do it
    $(this).addClass("set");
  });
});

basta cambiare:

$(".button").each(function() {
  $(this).click(function(){
    $('.button').removeClass("set");
    $(this).addClass("set");
  });
});

Non vedo il motivo per cui sarebbe un problema, un po 'lento dover tirare apri un ogni volta, ma questo è l'unico modo che contiene in un ciclo come si vuole.

Ancora non è sicuro perché non è possibile fare riferimento $ ( 'pulsante.') Dalla funzione interna ma si può catturare i riferimenti in una variabile libera, invece?

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");
  });
});

Ho risposto alla domanda posta nel corpo del testo. Se si desidera impostare la classe di ogni altro elemento che è un fratello, utilizzare fratelli

Interessante perché questo è nella tabella di marcia sotto radioClass ()

Quello che vuoi è fratelli , e non utilizzare ciascuna per impostare l'evento click sia.

$(".button").click(function() {
  $(this).addClass('set');
  $(this).siblings('.button').removeClass('set');
});

Vedere questo esempio per quanto sopra in azione:

http://jsbin.com/ewiqe

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top