ownerDocument
Обясните суть смысла данного атрибута node.ownerDocument?
Для чего он используется, чем хорош. |
Суть смысла (масло масляное) данного атрибута в том, что он ссылается на документ-владельца текущего элемента. Используется, чтобы получить ссылку на документ, в котором лежит элемент. Этим и хорош.
|
Это я в интернете прочитал, а на примере можно показать. Не могу понять. Это тоже самое, что вызвать parentNode элемента узла в котором он находится?
|
parentNode вернёт родительский элемент (который в DOM выше на 1 уровень), а ownerDocument вернёт "самый" родительский элемент (который в DOM на 1 уровне), т.е. объект document.
|
cool,
Цитата:
|
with-love-from-siberia,
что значит сей каламбур? |
Короче, я так понял вы сами не понимаете этого.
Те вещи которые понятны нам, нужно уметь объяснять. Вы можете сказать, я же точно так же описал, только мне понятно и хорошо, а вы сами догадывайтесь. Другими словами у нас существует объект или документ: xmlDoc.documentElement window.frames[0].document document = element.ownerDocument Предположим, что мы не знаем кто является у нас главным, мы используем метод ownerDocument, чтоб определить родителя всей структуры. Это тоже самое что вызвать node.parentNode, чтоб узнать кто является родителем элемента. |
Причём здесь parentNode?
|
Цитата:
|
Хм-м… попытаюсь объяснить и я. Интересно, получится? :)
DOM — «Document Object Model», то-бишь, объектная модель документа. Модель — это не имплементация. В модель не входит программирование непосредственно, а лишь описание объектов, свойств и методов и того, как они должны работать. Пример: Javascript
document.documentElement.appendChild(document.createElement("body")).setAttribute("class", "my"); Пример: PHP
$document->documentElement->appendChild($document->createElement("body"))->setAttribute("class", "my"); Языки разные, имена методов одинаковые, результат и там и там одинаковый — в корневой элемент документа вставляется новый элемент body, которому сразу присваивается класс. И про то и про другое можно сказать, это DOM. Но можно ли вставить напрямую объект DOM из одного языка в документ на другом языке? Нет. Можно, конечно, перевести в XML в одном месте и вставить из XML в другом, но это что угодно, а не «напрямую». Теперь представьте, что Вы написали свой собственный движок DOM на php. С нуля, мегакрутой, шустрее и менее затратный по памяти, чем libxml+DOMDocument. Естественно, Ваши методы и свойства будут называться так же: appendChild , insertBefore , parentNode , и т.д. И ожидаемые значения и действия их будут такими же. Иначе какая ж это модель DOM, хехе?Вопрос номер два: можно ли вставить элемент класса MyMegaCoolDOMEngineElement как childNode объекту DOMElement (стандартному)?В общем случае нет, Вас мягко пошлют, ссылаясь на то, что вы попытались вставить в документ какой-то инопланетянский объект. Вот и выходит, что DOM как модель над имплементацией себя не властна. А значит, может гарантировать лишь то, что всё это будет работать только в пределах одного отдельного документа. Как это реализовать? При создании любой ноды задавать ей свойство ownerDocument , которое содержит ссылку на тот документ, в котором она была создана. Не обязательно, прикреплена, именно создана. И если ownerDocument ссылается на что угодно, кроме текущего документа, при попытке, скажем, appendChild отвечаем мягким но настойчивым отказом (Exception ERR_WRONG_DOCUMENT ), ибо за последствия такого действия отвечать никто не станет.Так было до DOM версии 3. В третьем DOM появились методы adoptNode и importNode , позволяющие присваивать и копировать (соответственно) ноды из других элементов. Изменяя при этом ownerDocument , разумеется. Да еще и приписка «если производитель движка уверен, что все будет ОК, можно применять эти методы автоматически, не утруждая программера пониманием того, что есть из себя ownerDocument ». Ну, а если не «OK», то ловите по-старинке Exception ERR_WRONG_DOCUMENT .Ну… как-то так. |
Часовой пояс GMT +3, время: 19:57. |