Pregunta

Estoy tratando de poner en práctica HTML comportamiento del botón de radio en un conjunto de DIVs en jQuery. Quiero eliminar el "conjunto" clase de todos los elementos a continuación, utilizar addClass () para re-establecer el (un) elemento que se hace clic:

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

Quiero llamar removeClass () en todos los elementos - ( "botón ") en este caso $, pero no puedo hacer referencia a $ explícitamente

(" botón.").

No puedo simplemente llamo $ ( "botón '). RemoveClass (' set") fuera del bucle ya que esto es parte de un programa más grande y el comportamiento dentro del bucle cada una () puede ser modificado por otros parámetros.

¿Hay alguna manera de acceder a la totalidad de los elementos del interior, o pasarlos en una variable? O hay otra manera de abordar el problema?

¿Fue útil?

Solución

Usted puede estar buscando las nuevas href="http://docs.jquery.com/Core/selector" , ya que usted está haciendo un plugin:

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

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

Otros consejos

Si no puede código el selector de funciones en sus interiores, jQuery en realidad se puede devolver la cadena utilizada como selectora en la llamada original. Ver $ ( 'bla'). Selectores

Esto se ha añadido sólo en la versión más reciente sin embargo.

Esto parece complicado e innecesario, que podría ayudar a obtener una imagen más clara de lo que está tratando en última instancia lograr.

Dentro de su bucle se puede recuperar lo que quiera con jQuery $ ( "div") // dentro del bucle

Usted dice "pero no puedo hacer referencia a $ (". Botón ") de forma explícita.". ¿Por qué?

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

acaba de cambiar:

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

No veo por qué eso sería un problema, un poco lento tener que tirar .button cada vez, pero esa es la única manera de que contiene en un bucle como desea.

Aún no sabe por qué no puede hacer referencia $ ( 'botón') de la función interna, pero se puede capturar las referencias en una variable libre en su lugar?

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

contesté la pregunta planteada en el cuerpo del texto:. Si desea establecer la clase de todos los otro elemento que está un hermano, utilice los hermanos

interesante porque esto está en la hoja de ruta bajo radioClass ()

Lo que queremos es hermanos , y no utilizar cada uno para establecer el evento de clic tampoco.

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

Vea este ejemplo de lo anterior en acción:

http://jsbin.com/ewiqe

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top