Jquery: не селектор не работает в ie

У меня есть следующий 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?

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


person ktMen    schedule 04.05.2010    source источник


Ответы (1)


Если я правильно понимаю, вы пытаетесь манипулировать флажками, которые не отмечены и находятся внутри 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
    });

});

person zbrox    schedule 04.05.2010
comment
Это работает для не отмеченных флажков, спасибо. Но я хочу сделать что-то с флажками, не проверенными ИЛИ элементами без значения, что является причиной включения $(this).val() == во внутреннее предложение if. Подводя итог, я хочу перебрать элементы, которые не являются меткой или радио, и если они не имеют значения или они не отмечены флажком, сделайте что-нибудь. - person ktMen; 04.05.2010
comment
Благодарю вас! Это обновление работает как положено! Вопрос: почему не работает, как я понимаю, это разделение предлагаемого селектора на два предложения, то есть мой подход? - person ktMen; 04.05.2010
comment
Я не совсем уверен. Я просто попытался упростить это. Всякий раз, когда что-то чрезмерно усложняется, есть вероятность, что возникнут некоторые проблемы :) Позже я посмотрю глубже, чтобы проверить некоторые вещи, чтобы увидеть, что может быть причиной проблемы. - person zbrox; 04.05.2010