我可以写这个JQuery语句更清洁吗?

时间:2010-03-29 21:12:46

标签: javascript jquery

所以我有以下内容:

var box = $(".MyCheckBox");

if (box[0].checked)
{
    // Do something
}
else
{
    // Do something else
}

使用过滤器还是有更好的方法吗?

我知道我可以去:

$(".MyCheckBox")
    .filter(function(index) {
         return this.checked;
     })
    .each(function() {
         // do something
     });

但是我需要在else语句中做点什么...这样做更容易吗?谢谢!

3 个答案:

答案 0 :(得分:5)

attr('checked')无论如何都会返回第一个元素的选中值,所以没有[0] malarky。

if ($(".MyCheckBox").attr('checked')) {
 // Do something
} else {
 // else
}

答案 1 :(得分:5)

您可以使用内置的:checked选择器:

$(".MyCheckBox:checked").each(function() {
  //Do something with checked ones..
});
$(".MyCheckBox:not(:checked)").each(function() {
  //Do something with unchecked ones..
});

或者在每个类似于你拥有的内容中进行过滤:

$(".MyCheckBox").each(function() {
  if($(this).is(":checked")) {
    //Do something with checked ones..
  } else {
    //Do something with unchecked ones..
  }
});

或者,如果您想要切换一个类,然后使用不同的方法,这会将active类提供给已检查的类:

$(".MyCheckBox").each(function() {
  $(this).toggleClass("active", $(this).is(":checked"));
});

<强>更新
根据评论,如果你只想要原始速度:

$(".MyCheckBox").each(function() {
  if(this.checked) {
    //Do something with checked ones..
  } else {
    //Do something with unchecked ones..
  }
});

答案 2 :(得分:2)

我会选择Nick上面的最新答案,但我建议您完成选择。即,

$('input.myCheckBox').each(function(){
    // tralalala...
}

...只是因为它使你的初始jQuery选择更快一些。我的意思是,因为我们正在争论速度和所有。 ^ _ ^