Jquery: не работает селектор, т.е. - PullRequest
3 голосов
/ 04 мая 2010

У меня есть следующий HTML-код:

<ul>
                <li class="O">
                    <label for="radio1">Radio 1:</label>
                    <input type="radio" name="radio1" value="Yes" checked>Yes</input>
                    <input type="radio" name="radio1" value="No">No</input>
                </li>
                <li class="O">
                    <label for="checkbox1">Checkbox 1:</label>
                    <input type="checkbox" name="checkbox1" id="checkbox1" value="check"></input>
                </li>
            </ul>

Используя jQuery, я хотел бы сделать что-то, чтобы каждый флажок не был отмечен или элемент с пустым значением внутри элемента li с классом O. Это мой подход:

$('li').each(function(){
        if ($(this).hasClass('O')){
            $(this).children(':not(label,input:radio)').each(function(){
                if ( $(this).val() == "" || $(this).is(':checkbox:not(:checked)') ) {
                    //do something
                }
            });
        }

Этот код работает в FF, Opera, Chrome и Safari, но не в IE6-IE7.

Для обоих IE получение длины li с помощью $ (this) .children (': not (label, input: radio)'). Length возвращает 2, другие браузеры возвращают 0 и 1.

Кроме того, получение первого числа детей li, которые не являются меткой ($ (this) .children (': not (label)'). Length), возвращает 4, а количество детей ($ (this) .children (). length) возвращает 2. Это не имеет никакого смысла для меня вообще.

Я ошибаюсь или в используемом селекторе есть что-то, что не полностью совместимо с IE?

Заранее спасибо.

1 Ответ

1 голос
/ 04 мая 2010

Если я правильно понимаю, вы пытаетесь манипулировать флажками, которые не отмечены и находятся внутри li с классом O. У меня нет IE для тестирования, но я немного упростил его. Можешь попробовать?

$('li.O').each(function(){
    $(this).children(':checkbox:not(:checked)').each(function(){
        //stuff
    });
});

Обновление: на основании комментария, вы можете попробовать это:

$('li.O').each(function(){
    $(this).children(':checkbox:not(:checked), :not(label,input:radio)[value=]').each(function(){
        //stuff
    });

});

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