IE6 и IE7 иногда имеют ошибку jQuery с 'nodeName', является нулем или не объектом - PullRequest
2 голосов
/ 12 ноября 2008

У меня возникла проблема, когда настройка jQuery для свойства .html () выбранного элемента возвращает ошибку «имя_узла» равно нулю или не является объектом. Это происходит только в IE6 и IE7, но не в FF2, FF3, Opera (не позднее 12 ноября 2008 года) или Safari (опять же, не позднее).

Ответы [ 5 ]

2 голосов
/ 30 марта 2011

Это выглядит как ошибка в JQuery. Исключение выдается в строке 605 в 1.5.1:

nodeName: function( elem, name ) {
    return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},

Функция возвращает true, если имя узла объекта elem совпадает со строкой name. Если нет, или если имя узла elem отсутствует, мы возвращаем false. Однако elem не тестируется перед использованием. Поэтому, если elem равно нулю, вызов его члена .nodeName вызывает исключение нулевого указателя.

Простое исправление состоит в том, чтобы включить elem в начале предложения короткого замыкания AND :

return elem && elem.nodeName && elem.nodeName.toUpperCase()...

Теперь, если elem равно нулю, функция вернет false при первом тесте в предложении и никогда не попытается вызвать elem.nodeName, избегая, таким образом, NPE.

Я не проверял их все (часто используется), но во многих случаях, когда используется эта функция, elem проверяется перед вызовом функции. Но не во всех случаях, по-видимому.

2 голосов
/ 12 ноября 2008

Я решил проблему. Пример выглядит так:

$ ('# section #detail .data'). Html (data);

... где данные - это HTML, возвращаемый из вызова AJAX, и эта ошибка возникает только в IE6 и IE7 при втором вызове AJAX, а не в первом. Это необъяснимо. Возвращенная ошибка:

'nodeName' is null or not an object

Исправление состоит в том, чтобы просто очистить переменную перед установкой:

$ ('# section #detail .data'). Html (''); $ ('# section #detail .data'). html (data);

А потом IE6 и IE7 снова начали работать с ним.

Кстати, мне пришлось установить Visual Web Developer 2008 Express Edition, чтобы отладчик работал в IE7. Эта информация здесь .

1 голос
/ 22 марта 2012

Для меня это происходило в IE, когда я пытался выбрать элемент, которого не было. Я пытался получить его индекс среди его братьев и сестер, который был возвращен как -1. Затем я попытался показать этот элемент, получив его по индексу от его родителя. Это привело к этой ошибке.

Таким образом, я поставил проверку, не равен ли индекс -1. Это решило проблему для меня.

0 голосов
/ 12 ноября 2008

Вы знаете, с какими узлами вы можете работать? Или вы работаете в режиме IE quirks? Могут быть некоторые виды узлов, такие как #text, которые не отображаются правильно в DOM в режиме причуд.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
0 голосов
/ 12 ноября 2008

Я не знаю, подключено ли это, но у нас возникла проблема, похожая на ту, в которой у DOM нет дочерних элементов / текста элемента, который, как мы знаем, существует (потому что мы видим их на экране !)

Выбор чего-то другого, затем выбор элемента снова, казалось, решил проблему - внезапно появляются дети. Так что же произойдет, если вы выберете свой элемент, выберите что-то еще, снова выберите свой элемент?

...