2012-02-08 255 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*$/) 
    })