2012-02-08 211 views
3

我想要写一个选择器,其将选择类型radioORcheckbox
2.哪个被选择即
1.输入元件。有is(':checked')true
3.并有一个类适用于它。
我想出了下面的代码嵌套jQuery选择

$([':radio'],[':checkbox']).each(function() { 
    if($(this).is(':checked')) 
    { 
     className = $(this).attr('class'); 
     if(className!= "") 
     { 
      $('#'+className +' :input').attr('disabled', false); 
     } 
    } 
    });  

其workign很好,但我正在寻找更有效的解决方案,我选择了这一切radiocheckbox和过滤。
我如何结合所有条件?

谢谢!


编辑:
radiocheckbox可以有任何类即我想选择所有radiocheckboxes被选中,并有ATLEAST一个class应用它。

+1

见我的编辑/更新 – 2012-02-08 08:32:22

回答

4

这个选择会发现被选中,有一些关于它的类中的任何无线电或复选框控制。

$(":radio:checked[class], :checkbox:checked[class]") 

你可以看到它在这里工作:http://jsfiddle.net/jfriend00/bYbnH/

如果你需要避免空的类名(其中属性存在,但它设置为空字符串,那么你可以使用这个:

$(":radio:checked[class], :checkbox:checked[class]").filter(function() { 
    return(this.className && this.className.length != 0); 
}) 
+0

完全一样,我正在谈论。非常感谢:) – xyz 2012-02-08 08:36:45

+0

是':checkbox /:radio'实际需要的吗?我猜':检查[class]'就够了,还是有一个可以检查的元素,我忘记了?它不会匹配具有空类属性的元素吗? – Yoshi 2012-02-08 09:02:54

+1

@Yoshi - 它会匹配一个空的类。不知道这是否是OP的问题,因为它不会在正常标记中出现,尽管它可能以编程方式发生。可以在其他类型的输入控件上有一个checked属性(不知道为什么它会在那里,但它可以是),这将匹配选择器':checked',因此这将限制它仅限于无线电和复选框类型。我添加了一个新的选项,可以过滤掉空的类名。 – jfriend00 2012-02-08 09:15:01

2

可以将问题编辑后尝试

$(":radio:checked ,:checkbox:checked").hasClass("someclass") 

$(":radio:checked[class] ,:checkbox:checked[class]") 
+0

对不起,把模糊的疑问句灰。我想选择所有被选中的'radio'或'checkboxes',并且至少有一个'class'应用于它。 – xyz 2012-02-08 08:19:50

+0

@Ajinkya - 我提供的回应应该为您完成。 – 2012-02-08 08:20:29

+1

@aro:输入元素可以应用ANY类。它认为你的答案是特定于名为'someClass'的类。 – xyz 2012-02-08 08:22:38

0
$(':radio:checked,:checkbox:checked').filter(function (index) { 

    if (typeof $(this).attr('class') != 'undefined') 
     return true; 
    else 
     return false; 

}).each(function() { 

    alert('i am checked and i am checkbox or radio and i have a class!'); 

}); 

UPDATE:

你想用$.filter()

http://jsfiddle.net/grGHa/1/

HTH

+0

@aro:感谢您的建议,请检查我的编辑。 – xyz 2012-02-08 08:20:13

1
$(':radio:checked,:checkbox:checked').filter(function(){ 
    return $(this).attr('class').length>0; 
}); 
0

我会去

jQuery(":radio:checked ,:checkbox:checked") 
    .filter(function() { 
    // return true if className is not empty or just whitespace 
    return ! this.className.match(/^\s*$/) 
    })