Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.05.2011, 22:02
Интересующийся
Отправить личное сообщение для cool Посмотреть профиль Найти все сообщения от cool
 
Регистрация: 21.01.2011
Сообщений: 18

ownerDocument
Обясните суть смысла данного атрибута node.ownerDocument?
Для чего он используется, чем хорош.
Ответить с цитированием
  #2 (permalink)  
Старый 08.05.2011, 22:09
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Суть смысла (масло масляное) данного атрибута в том, что он ссылается на документ-владельца текущего элемента. Используется, чтобы получить ссылку на документ, в котором лежит элемент. Этим и хорош.
Ответить с цитированием
  #3 (permalink)  
Старый 09.05.2011, 19:30
Интересующийся
Отправить личное сообщение для cool Посмотреть профиль Найти все сообщения от cool
 
Регистрация: 21.01.2011
Сообщений: 18

Это я в интернете прочитал, а на примере можно показать. Не могу понять. Это тоже самое, что вызвать parentNode элемента узла в котором он находится?
Ответить с цитированием
  #4 (permalink)  
Старый 09.05.2011, 19:42
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

parentNode вернёт родительский элемент (который в DOM выше на 1 уровень), а ownerDocument вернёт "самый" родительский элемент (который в DOM на 1 уровне), т.е. объект document.
Ответить с цитированием
  #5 (permalink)  
Старый 09.05.2011, 20:55
Профессор
Отправить личное сообщение для with-love-from-siberia Посмотреть профиль Найти все сообщения от with-love-from-siberia
 
Регистрация: 14.12.2009
Сообщений: 155

cool,
Сообщение от Kolyaj
ссылается на документ-владельца текущего элемента
Сказать node.ownerDocument все равно, что пальцем на Адама показать. )))
Ответить с цитированием
  #6 (permalink)  
Старый 09.05.2011, 21:08
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

with-love-from-siberia,
что значит сей каламбур?
Ответить с цитированием
  #7 (permalink)  
Старый 13.05.2011, 10:57
Интересующийся
Отправить личное сообщение для cool Посмотреть профиль Найти все сообщения от cool
 
Регистрация: 21.01.2011
Сообщений: 18

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

Другими словами у нас существует объект или документ:
xmlDoc.documentElement
window.frames[0].document

document = element.ownerDocument

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

Это тоже самое что вызвать node.parentNode, чтоб узнать кто является родителем элемента.

Последний раз редактировалось cool, 13.05.2011 в 11:11.
Ответить с цитированием
  #8 (permalink)  
Старый 13.05.2011, 11:32
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Причём здесь parentNode?
Ответить с цитированием
  #9 (permalink)  
Старый 13.05.2011, 13:47
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от cool
Короче, я так понял вы сами не понимаете этого.
то что ты не понял сказанное тебе-говорит лишь только об одном-о твоей ограниченности,но не говорит о том что здесь не знают ответ
Ответить с цитированием
  #10 (permalink)  
Старый 13.05.2011, 15:22
Аватар для subzey
Пионэр
Отправить личное сообщение для subzey Посмотреть профиль Найти все сообщения от subzey
 
Регистрация: 16.11.2009
Сообщений: 1,322

Хм-м… попытаюсь объяснить и я. Интересно, получится?

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.

Ну… как-то так.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск