2

我正在尝试在 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") 因为这是更大程序的一部分,并且 each() 循环内的行为可以通过其他参数进行修改。

有没有办法从内部访问完整的元素集,或者将它们作为变量传递?还是有另一种解决问题的方法?

4

7 回答 7

3

您可能正在寻找新的选择器功能,因为您正在制作插件:

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

$('.button').test();
于 2009-05-22T19:19:15.007 回答
2

如果您不能在内部函数中对选择器进行硬编码,jQuery 实际上可以返回在原始调用中用作选择器的字符串。见$('.bla').selector

不过,这仅在较新的版本中添加。

于 2009-05-22T19:06:18.263 回答
0

这似乎不必要地复杂,它可能有助于更清楚地了解您最终要实现的目标。

在循环中,您可以使用 jquery $("div") // 在循环中获取任何您喜欢的内容

于 2009-05-22T18:55:34.260 回答
0

你说“但我不能明确地引用 $(".button")。”。这是为什么?

$(".button").each(function() {
  $(this).click(function(){
    $('.button').removeClass('set'); // this should do it
    $(this).addClass("set");
  });
});
于 2009-05-22T18:56:46.660 回答
0

只是改变:

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

我不明白为什么这会是一个问题,每次都必须拉动 .button 有点慢,但这是包含在循环中的唯一方法,就像你想要的那样。

于 2009-05-22T18:57:16.393 回答
0

我回答了正文中提出的问题:如果您想设置所有其他同级元素的类,请使用同级。

有趣,因为这是在 radioClass() 下的路线图中

你想要的是兄弟姐妹,也不要使用 each 来设置点击事件。

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

请参阅此示例以了解上述情况:

http://jsbin.com/ewiqe

于 2009-05-22T18:57:39.140 回答
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");
  });
});
于 2009-05-22T19:31:45.560 回答