我正在尝试在JQuery中的一组DIV上实现HTML单选按钮行为。我想从所有元素中删除“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”),因为这是更大程序的一部分,而且每个()循环内部的行为可以被其他参数修改。
有没有办法从内部访问完整的元素集,或者将它们作为变量传递?或者还有另一种解决问题的方法吗?
答案 0 :(得分:3)
您可能正在寻找新的selector功能,因为您正在制作插件:
jQuery.fn.test = function() {
console.log(this.selector); // .button
};
$('.button').test();
答案 1 :(得分:2)
如果你不能在内部函数中硬编码选择器,jQuery实际上可以返回在原始调用中用作选择器的字符串。见$('.bla').selector
这只是在新版本中添加的。
答案 2 :(得分:0)
这似乎是不必要的复杂,它可能有助于更清楚地了解你最终想要实现的目标。
在你的循环中,你可以使用jquery $(“div”)//在循环中获取你喜欢的任何东西
答案 3 :(得分:0)
你说“但我不能明确地引用$(”。button“)。”那是为什么?
$(".button").each(function() {
$(this).click(function(){
$('.button').removeClass('set'); // this should do it
$(this).addClass("set");
});
});
答案 4 :(得分:0)
只是改变:
$(".button").each(function() {
$(this).click(function(){
$('.button').removeClass("set");
$(this).addClass("set");
});
});
我不明白为什么那会是一个问题,每次拉动.button有点慢,但这是你想要的循环中包含的唯一方法。
答案 5 :(得分:0)
我回答了正文中提到的问题:如果你想设置每个 其他 元素的类,那就是兄弟姐妹。
Interesting because this is in the roadmap under radioClass()
您想要的是siblings,并且不要使用每个来设置点击事件。
$(".button").click(function() {
$(this).addClass('set');
$(this).siblings('.button').removeClass('set');
});
请参阅此示例以了解上述操作:
答案 6 :(得分:0)
仍然不确定为什么你不能从内部函数引用$('。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");
});
});