Функция jquery $, возвращающая разные результаты в IE - PullRequest
1 голос
/ 06 мая 2009
$('.Schedule .Full input').each(function(i)
 {
        var controls = $('.Morning input, .MorningPart input, .Afternoon input, .AfternoonPart input', $(this).parents('.Schedule'));
        alert(controls.length + " Conflicting Controls\n"+
              $(this).parents('.Schedule').attr('id') + " Parent");
 });

Когда я запускаю этот код в Firefox, при первом выполнении этой функции появляется окно с сообщением следующего содержания:

17 Конфликтующие элементы управления
Родитель понедельника

Точно такая же страница, запущенная в IE 6 или 7, создает окно с сообщением следующего содержания:

45 Конфликтующие элементы управления
Родитель понедельника

Firefox прав, есть только 17 конфликтующих элементов управления. 45, которые идентифицирует IE, являются элементами управления, которые не являются потомками «понедельника». Если я указал «понедельник» в качестве контекста для функции $ (), почему IE возвращает элементы управления за ее пределами?

Ответы [ 3 ]

1 голос
/ 06 мая 2009

Я немного изменил ваш пример, потому что моя структура немного отличается

$(this).parents('.RadioSchedule').children('.Morning, .MorningPart, .Afternoon, .AfternoonPart').find('input');

это сработало, дало одинаковые результаты в IE и Firefox

1 голос
/ 06 мая 2009
<div id="Monday" class="Schedule">
    <div class="Full">
        <div>
            <input type="radio" name="MondayFullDay" checked="checked" value="none"/>None 
        </div>
    </div>
</div>
<div id="Tuesday" class="Schedule">
    <div class="Full">
        <div>
            <input type="radio" name="TuesdayFullDay" checked="checked" value="none"/>None 
        </div>
    </div>
</div>

Хорошо, вот еще одна сложная часть ... Похоже,

$(this).parents('.Schedule');

возвращает все больше результатов по мере выполнения. Поэтому, когда он выполняется в первый раз для MondayFullDay, он возвращает 1 результат, но как только он попадает во вторникFullDay, он возвращает 2 результата. Это только в IE.

Поскольку приведенная выше структура xhtml не является обязательной для этого приложения, в итоге я просто вручную прошел DOM через последовательные вызовы .parent ().

Изменение этого

$(this).parents('.Schedule'); 

В это

$(this).parent().parent().parent();

Я все еще убежден, что метод parent () работает не так, как описано в документации ...

1 голос
/ 06 мая 2009

Дайте этому попытку

var controls = $(this).parents('.Schedule').children('.Morning input, .MorningPart input, .Afternoon input, .AfternoonPart input')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...