jQuery - jQuery - запрос:Доступ к исходному объекту jquery внутри каждого

StackOverflow https://stackoverflow.com/questions/899413

  •  23-08-2019
  •  | 
  •  

Вопрос

Я пытаюсь реализовать поведение переключателей HTML для набора DIVS в jQuery.Я хочу удалить класс "set" из всех элементов, затем использовать addClass(), чтобы повторно установить (один) элемент, на который нажимается:

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

Я хочу вызвать removeClass() для всех элементов - в данном случае $(".button"), но я не могу явно ссылаться на $ (".button").

Я не могу просто вызвать $(".button").removeClass("set") вне цикла, поскольку это часть более крупной программы, и поведение внутри цикла each() может быть изменено другими параметрами.

Есть ли какой-нибудь способ получить доступ к полному набору элементов изнутри или передать их в качестве переменной?Или есть другой способ подойти к проблеме?

Это было полезно?

Решение

Возможно, вы ищете новый селектор особенность, поскольку вы создаете плагин:

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

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

Другие советы

Если вы не можете жестко запрограммировать селектор в своих внутренних функциях, jQuery действительно может вернуть строку, использованную в качестве селектора в исходном вызове.Видишь $('.bla').селектор

Однако это было добавлено только в более новой версии.

Это кажется излишне сложным, это могло бы помочь получить более четкое представление о том, чего вы в конечном счете пытаетесь достичь.

Внутри вашего цикла вы можете извлечь все, что вам нравится, с помощью jquery $ ("div") // внутри цикла

Вы говорите: "но я не могу явно ссылаться на $(".button")"..Почему это?

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

просто измени:

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

Я не понимаю, почему это было бы проблемой, немного медленно нажимать .button каждый раз, но это единственный способ, содержащийся в цикле, как вы хотите.

Все еще не уверен, почему вы не можете ссылаться на $('.button') из внутренней функции, но можете ли вы вместо этого записать ссылки в свободную переменную?

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

Я ответил на вопрос, заданный в основной части текста:Если вы хотите установить класс каждого Другое элемент, который является родственным, используйте siblings.

Интересно, потому что это есть в дорожной карте в разделе radioClass()

То, что вы хотите, это братья и сестры, и также не используйте каждый из них для установки события щелчка.

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

Смотрите этот пример вышеизложенного в действии:

http://jsbin.com/ewiqe

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top