2012-01-24 2 views
4

Я действительно надеюсь, что я пропустил что-то очевидное здесь. Вот скриншот консоли в Chrome, мертвое передо мной (ну, другие вкладки):JavaScript: тот же элемент, полученный getElementById, но .. другой?

What's the difference between one element and the other?

e был получен с помощью .getElementById("overlayidentifier") мной, с консоли. Другая переменная используется довольно грязным сценарием, включенным на сайт, с которым я работаю.

Прежде чем я погрузился в бездну скрипта, который изначально создает и работает с overlayidentifier, я просто хотел узнать .. что здесь происходит.

Все .style Изменения в e имеют эффект - ничего не происходит, если overlayidentifier.style.~ изменен.

С чего начать?

Демистифицировано. Для более любопытных:

Проблема была одинокая .innerHTML += -различная часть кода где-то на странице. Использование .innerHTML приводит к восстановлению структуры DOM внутри элемента, на который он вызывается. Таким образом, любые ссылки элементов внутри, полученные до назначения .innerHTML, становятся недействительными в запутанном виде: они сохраняют большинство своих атрибутов, с которыми можно взаимодействовать нормально, но они больше не находятся в дереве DOM. Об этом свидетельствует .parentNode, возвращающий null.

На самом деле это была пустая трата времени.

+1

вот скринкаст некоторых советов и трюков с помощью хром-консоли/dev tools http://talkminer.com/viewtalk.jsp?videoid=nOEw9iiopwI&q= – Kristian

ответ

3

У вас есть два элемента с идентификатором overlayidentifier, как свидетельствуют мало «>» стрелки и ..., что говорит ваш DIV имеет содержимое, когда вы набираете overlayidentifier, что не существует, когда вы набираете e

К уточните, поскольку один ваших узлов имеет «>», а другой нет, у вас есть два разных узла.

+0

... означает, что есть вложенные элементы. – Kristian

+2

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

+1

@ Пирс: cwolves не говорит, что треугольник показывает наличие дубликатов. Но эти два узла различны, поскольку один из них имеет дочерний узел (узлы), а другой - нет. – user123444555621

1

Объект overlayidentifier может быть клон элемента DOM с идентификатором overlayidentifier. Если бы он был клонирован, он содержал бы по крайней мере один и тот же HTML и атрибуты (и, возможно, те же обработчики событий и дочерние элементы, если это глубокий клон ), но он больше не представляет собой фактический элемент внутри DOM.

Внесение изменений с style() не будет иметь видимого эффекта, пока оно не будет прикреплено к DOM где-то. Надеюсь, это поможет!

1

Когда вы вводите прямо в консоль хром, и вы просто пишете идентификатор, он вернет элемент плюс все его содержимое. Однако на скриншоте 'e' var возвращает div без вложенных элементов внутри этого div.

Когда я выполняю getElementById() того же ID, я получаю тот же ответ.

Что мне говорит о том, что в момент, когда ваша переменная e была установлена, содержимое div не было там, возможно.

Смежные вопросы