Когда document.getElementById () нет? - PullRequest
3 голосов
/ 29 июля 2011

У меня есть некоторый JavaScript, который получает элементы по идентификатору из документа HTML.

В одном конкретном сценарии метод document.getElementById (idString) возвращает ноль в режиме совместимости с IE8, однако эквивалент jQuery работает.Мне нужно выяснить, почему не работает собственный вызов.

Вот пример:

var myId = "e_" + someId;
var myNativeDiv = document.getElementById(myId);
var myjQueryDiv = $("#" + myId);
alert(myNativeDiv + " - " + myjQueryDiv); // alerts "null - [Object object]"

Я проверил, что myId уникально в документе.

Любые возможности для изучения приветствуются.


Обновление - на самом деле, myjQueryDiv также пусто, но я думаю, jQuery делает его не нулевым.Однако вызов parentDom.find("#" + myId); возвращает правильный элемент, где parentDom является предком элемента, который мне нужно найти.

Ответы [ 3 ]

5 голосов
/ 29 июля 2011

Согласно MSDN ...

В режиме стандартов IE8 getElementById выполняет регистрозависимое сопоставление только для атрибута ID.В стандартном режиме IE7 и предыдущих режимах этот метод выполняет сопоставление без учета регистра для атрибутов ID и NAME, что может привести к неожиданным результатам.

Возможно, ваш код использует одно из следующих способов поведения.


jQuery упаковывает свои результаты в объект jQuery , поэтому такие вещи, как $(".unused-class").remove(), не вызывают ошибок.Вы можете проверить .length или значение в [0], чтобы увидеть, соответствует ли оно каким-либо элементам.

1 голос
/ 29 июля 2011

отлично работает у меня

0 голосов
/ 09 августа 2011

Хорошо, вот ответ.

Ранее я detach() редактировал элемент-предок, поэтому jQuery find мог видеть элемент по ID при выполнении из элемента-предка в отсоединенном фрагменте.

Конечно, и jQuery находят без контекста, и собственный метод правильно не возвращает элемент, так как это не было в этой точке части document.

...