Вложенный селектор Jquery - PullRequest
       10

Вложенный селектор Jquery

3 голосов
/ 08 февраля 2012

Я хочу написать селектор, который выберет
1. Элементы ввода типа radio ИЛИ checkbox
2. Какие выбраны, т.е.с is(':checked') как true
3. и к нему применен некоторый класс.
Я придумаю следующий код

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

Его рабочий код отлично, но я выгляжу более эффективнымрешение, так как я выбираю все radio и checkbox и фильтрую их.
Как я могу объединить все условия?

Спасибо!


РЕДАКТИРОВАТЬ:
radio или checkbox может иметь ЛЮБОЙ класс, т.е. я хочу выбрать все radio или checkboxes, которые выбраны и имеютпо крайней мере один class применил его.

Ответы [ 5 ]

4 голосов
/ 08 февраля 2012

Этот селектор найдет любой радио или флажок, который отмечен и имеет какой-то класс.

$(":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);
})
2 голосов
/ 08 февраля 2012

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

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

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

$(":radio:checked[class] ,:checkbox:checked[class]")
1 голос
/ 08 февраля 2012
$(':radio:checked,:checkbox:checked').filter(function(){
     return $(this).attr('class').length>0;
});
0 голосов
/ 08 февраля 2012

Я бы пошел на

jQuery(":radio:checked ,:checkbox:checked")
  .filter(function() {
    // return true if className is not empty or just whitespace
    return ! this.className.match(/^\s*$/) 
  })
0 голосов
/ 08 февраля 2012
$(':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!');

});

ОБНОВЛЕНИЕ:

Вы хотите использовать $.filter():

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

HTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...