jQuery - jQuery - запрос:Доступ к исходному объекту jquery внутри каждого
Вопрос
Я пытаюсь реализовать поведение переключателей 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');
});
Смотрите этот пример вышеизложенного в действии: