2012-02-08 2 views
3

Я хочу написать селектор, который будет выбирать
1. Входные элементы типа radioИЛИcheckbox
2. Какие выбраны есть. у которых есть 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 прекрасно, но я ищу более эффективное решение, как я выбрать все radio и checkbox и фильтрации через него.
Как я могу объединить все условия?

Спасибо!


EDIT:
radio или checkbox может иметь любой класс Т.е. я хочу, чтобы выбрать все radio или checkboxes, которые выбраны и имеют по крайней мере один class применил его.

+1

Смотрите мое редактирование/обновление –

ответ

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

+0

это ': checkbox /: radio' на самом деле нужно? Я думаю, ': checked [class]' будет достаточно, или есть элемент, который можно проверить, я забыл? И не будет ли это соответствовать элементам с пустыми атрибутами класса? – Yoshi

+1

@Yoshi - он будет соответствовать пустующему классу. Не знаю, является ли это проблемой OP или нет, поскольку это не происходит при нормальной разметке, хотя это может произойти программно. Возможно, у вас есть проверенный атрибут для других типов элементов управления вводами (не уверен, почему он будет там, но может быть), который будет соответствовать селектору ': checked', поэтому это ограничивает его только для типов радио и флажков. Я добавил новый параметр, который отфильтровывает пустые имена классов. – jfriend00

2

вы можете попробовать

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

после вопроса редактировать

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

к сожалению для размещения неоднозначные Ques Тион. Я хочу выбрать все «радио» или «флажки», которые были выбраны, и по крайней мере один «класс» применил его. – xyz

+0

@ Ajinkya - ответ, который я вам предоставил, должен выполнить это для вас. –

+1

@aro: Элемент ввода может иметь к нему ЛЮБЫЙ класс. Он считает, что ваш ответ специфичен для класса с именем 'someClass'. – xyz

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/

НТН

+0

@aro: Спасибо за предложение, пожалуйста, проверьте мои изменения. – xyz

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*$/) 
    })