仅当缺少类时,JQuery输入复选框才设置类

时间:2011-04-04 20:42:01

标签: jquery input addclass

我想只在复选框缺少preexising类时才将类设置为Checkbox。还要注意它可能包含空类,然后用新类覆盖它。 我正在使用以下但是如何将条件添加到查找中?

$(this).find("input[type='radio'],input[type='checkbox']").addClass('IE8Border');

我正朝着这个方向努力:

$(this).find("input[type='radio'],input[type='checkbox']").each(function() {
    $(this)[("[class='']")].addClass('IE8Border');
    $(this)[(":not([class])")].addClass('IE8Border');
});

3 个答案:

答案 0 :(得分:3)

您可以使用hasClass检查是否已添加类。

试试这个:

$(this).find("input[type='radio'],input[type='checkbox']").filter(function(){
    return !$(this).hasClass('IE8Border');
}).addClass('IE8Border');

您还可以避免使用具有以下版本的过滤器:

$(this).find("input[type='radio']:not(.IE8Border),input[type='checkbox']:not(.IE8Border)").addClass('IE8Border'); 

修改 如果你的支票只是为了存在一个类,那么试试这个:

$(this).find("input[type='radio'],input[type='checkbox']").filter(function(){
  var thisClass = $(this).attr("class");
    return !(thisClass && thisClass.length > 0);
}).addClass('IE8Border');

答案 1 :(得分:3)

我对你的要求有点不清楚,所以我有两个答案:

如果您尝试避免添加重复的类(即两次添加IE8Border),则无需过滤任何内容。 .addClass()只会在该元素上尚不存在的情况下添加该类。

如果你想只为那些还没有类的元素添加一个类,试试这个:

$(this).find("input[type='radio'],input[type='checkbox']").filter(function() {
   return this.className === '';
}).addClass('IE8Border');

Have a look at this demo to see this working ->

答案 2 :(得分:1)

我完全同意Cyber​​nate的回答。但是你只想添加一个类还是要覆盖?对于后一个尝试:

$("input[type='radio'],input[type='checkbox']",this).filter(function(){
    var thisClass = $(this).attr("class");
    return !(thisClass && thisClass.length > 0);
}).removeAttr('class').addClass('IE8Border');

并且为了扩展Cyber​​nate的答案而不是filter(),您还可以使用not()函数。

$("input[type='radio'],input[type='checkbox']").not('.IE8Border').addClass('IE8­Border');