Объектная модель документа

Вопрос простой, но сбивает меня с толку: когда я использую console.log(document.body) или (document.head), оба работают нормально, но когда я делаю это с document.script или document.html, эти два не работают, почему? хотя все это есть в документе?

Q2) я могу написать

document.getElementById('something')

но почему я не могу написать

document.body.getElementById('something')

хотя тело находится в документе, а элемент также в теге body, а иногда document.body работает на разных этапах скрипта


person Haseeb Jumani    schedule 18.01.2017    source источник


Ответы (1)


getElementById — это метод document, который представляет собой объект, использующий Document. интерфейс из DOM. Это не метод для элементов (интерфейс Element из DOM и его специализация HTMLElement из HTML). document.body — это элемент (HTMLBodyElement, который является HTMLElement, который является Element), а не документ.

Некоторые методы (например, querySelector) являются методами элементов обоих document и, потому что для них имеет смысл быть (для элемента querySelector смотрит только внутри элемента, а не по всему документ). Но getElementById нет. (Может быть, но было бы немного странно ограничивать его только элементом, когда идентификаторы должны быть уникальными во всем документе.)

person T.J. Crowder    schedule 18.01.2017
comment
как вы сказали, querySelector - это метод как для документа, так и для элементов (например, тела), так как это имеет смысл для элемента и почему бы не getElementById для обоих? - person Haseeb Jumani; 18.01.2017
comment
@HaseebJumani: Как я уже сказал выше: Может быть, но было бы немного странно ограничивать его только элементом, когда идентификаторы должны быть уникальными во всем документе. - person T.J. Crowder; 19.01.2017