Как переменная связывает свое значение с DOM? - PullRequest
5 голосов
/ 08 июня 2011

Это может быть сумасшедшим, но это меня заинтриговало довольно давно:)

Я хотел бы знать, как переменная javascript может связывать себя, например, после добавления DOM в тело?

var p = document.createElement('p');
p.innerHTML = 'Hello World';

document.body.appendChild(p);

Итак, теперь у меня есть эта p переменная, которая содержит точную ссылку на этот конкретный абзац, независимо от того, где он находится внутри тела.

p.innerHTML = 'new content';

легко найдет абзац и изменит его значение

Так что мой вопрос ... как это связывание сделано?

что если я захочу воссоздать это после того, как переменная исчезнет? Есть ли способ присоединить это снова без необходимости проходить через DOM и найти его?

Я думал о том, есть ли у каждого узла в DOM свой специфический идентификатор, который не является атрибутом id, а является неким UUID, на который можно ссылаться позже?

как:

console.log(p.localName); //aoi12e2kj2322444r4t
p = null;

чтобы я мог восстановить тот узел абзаца, который думал, что это uuid?

В этой среде у меня не будет доступа ни к какому внешнему атрибуту узла, например name, id, data и т. Д.

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

Ответы [ 2 ]

1 голос
/ 08 июня 2011

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

0 голосов
/ 08 июня 2011

Привязка создается в первой строке, где вы присваиваете результат document.createElement для p.Это ничем не отличается от любого другого случая, когда вы назначаете что-то переменной, которая всегда привязывает имя переменной к значению.Что касается сценария, то никакой другой привязки не происходит.p - это HTMLElement, и это все, что раскрывается.

Обратите внимание, что для p.innerHTML = 'new content'; элемент не должен быть найден, поскольку p уже ссылается на элемент.Это то, что делает DOM: он предоставляет документы и элементы документа.

Если вам позже понадобится еще одна ссылка на тот же элемент, вам придется использовать методы DOM (например, getElementById), чтобы найти его.Вот для чего они здесь.

Что касается того, как DOM предоставляет элементы, это реализовано внутри и варьируется от браузера к браузеру или от библиотеки к библиотеке (поскольку DOM используется не только в браузерах).

...