JQuery: accesso oggetto jQuery originale all'interno di ogni
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?
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: