JS властивість Element.ownerDocument


Загальний опис

Властивість ownerDocument вузла являє собою посилання на об'єкт документа, до якого належить цей вузол. Вона надає доступ до кореневого об'єкта document для елементів, які є частиною дерева DOM, і дозволяє маніпулювати документом загалом. Ця властивість особливо корисна для роботи з фрагментами документів та для створення нових вузлів поза межами основної структури DOM.

Використання властивості ownerDocument найпростіше проілюструвати на прикладі створення нового елемента за допомогою методу createElement(). Розглянемо базовий випадок:

const newElement = document.createElement('div');

Тут ми створюємо новий елемент <div> за допомогою методу createElement(), який викликається на об'єкті document. Однак, якщо потрібно створити вузол поза межами основного документа, наприклад, всередині іншого вузла або фрагмента, ми можемо використати властивість ownerDocument:

const fragment = document.createDocumentFragment();
const newElement = fragment.ownerDocument.createElement('div');
fragment.appendChild(newElement);

У цьому прикладі ми спочатку створюємо порожній DocumentFragment за допомогою createDocumentFragment(). Потім, використовуючи ownerDocument цього фрагмента, ми створюємо новий елемент <div>. Нарешті, ми додаємо створений елемент до фрагмента за допомогою appendChild().

Властивість ownerDocument також корисна для створення нових вузлів з використанням createTextNode(), createComment() та інших методів маніпуляції DOM. Наприклад:

const fragment = document.createDocumentFragment();
const textNode = fragment.ownerDocument.createTextNode('Це текстовий вузол');
fragment.appendChild(textNode);

Тут ми створюємо новий текстовий вузол за допомогою createTextNode(), викликаного на об'єкті document, доступному через ownerDocument фрагмента.

Властивість ownerDocument може бути особливо корисною при роботі з вузлами, які не належать до основного документа, наприклад, при маніпуляціях з фрагментами документів або при створенні нових документів за допомогою DOMImplementation. Вона забезпечує доступ до кореневого об'єкта document, що дозволяє створювати та маніпулювати вузлами, які не є частиною основної структури DOM.

автор: Bond

Порада

Під час роботи з вузлами, які можуть бути перенесені між документами, використовуйте ownerDocument для забезпечення належного контексту. Ця властивість завжди посилається на документ, до якого належить вузол, що дозволяє уникнути помилок при маніпуляціях з вузлами в різних документах.

автор: Bond
Порада

Якщо ви маєте вузол, який не належить до основного документа, наприклад, вузол, який був клонований або переміщений, використовуйте ownerDocument для доступу до кореневого об'єкта document. Це дозволить вам створювати нові вузли або маніпулювати документом загалом, навіть якщо ви працюєте з вузлами, які не є частиною основної структури DOM.

автор: Bond
Порада

При створенні нових документів за допомогою DOMImplementation.createDocument(), використовуйте властивість ownerDocument нового документа для подальшої маніпуляції вузлами. Це забезпечить належний контекст для створення та додавання нових вузлів до нового документа.

const domImpl = document.implementation;
const newDoc = domImpl.createDocument('http://www.w3.org/1999/xhtml', 'html', null);
const body = newDoc.ownerDocument.createElement('body');
newDoc.documentElement.appendChild(body);
автор: Bond

Синтаксис

Node.ownerDocument

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 9 1 ≤12.1 12 6
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 9 1

Приклади

+ запропонувати свій приклад у пісочниці

У цьому прикладі демонструється використання властивості ownerDocument для новоствореного елемента DOM. Спочатку ми створюємо новий елемент div за допомогою методу document.createElement('div'). Потім ми отримуємо ownerDocument для цього елемента, який є об'єктом document, що представляє весь документ. Нарешті, ми виводимо nodeName об'єкта ownerDocument у консоль, що має значення "#document".

// Створюємо новий елемент div
const newDiv = document.createElement('div');

// Отримуємо ownerDocument для новоствореного елемента
const ownerDocument = newDiv.ownerDocument;

// Виводимо назву ownerDocument у консоль
console.log(ownerDocument.nodeName); // Вивід: "#document"
автор: Bond

У цьому прикладі ми демонструємо, як використовувати властивість ownerDocument для створення нового документа та додавання елементів до нього. Спочатку ми створюємо новий елемент div та встановлюємо його textContent. Потім ми створюємо новий порожній документ за допомогою методу implementation.createHTMLDocument('') на об'єкті ownerDocument нового елемента div.

Після цього ми додаємо новостворений елемент div до body нового документа за допомогою методу appendChild(). Нарешті, ми виводимо вміст documentElement (коренева частина документа) нового документа у консоль, який містить наш новий елемент div.

Цей приклад демонструє, як можна використовувати властивість ownerDocument для створення нових документів та маніпулювання їх вмістом програмно.

// Створюємо новий елемент div
const newDiv = document.createElement('div');
newDiv.textContent = 'Це новий div';

// Створюємо новий документ
const newDocument = newDiv.ownerDocument.implementation.createHTMLDocument('');

// Додаємо новий елемент div до нового документа
newDocument.body.appendChild(newDiv);

// Виводимо вміст нового документа
console.log(newDocument.documentElement.innerHTML);
автор: Bond

У цьому прикладі створено контейнер div з деяким текстом. Є дві кнопки: одна для показу ownerDocument контейнера, а інша - для створення нового документа.

При натисканні на кнопку "Показати ownerDocument" викликається функція showOwnerDocument(), яка отримує ownerDocument контейнера та виводить його documentElement (коренева частина документа) в елемент <p> з ідентифікатором output.

При натисканні на кнопку "Створити новий документ" викликається функція createNewDocument(), яка створює новий порожній документ за допомогою методу implementation.createHTMLDocument('') на об'єкті ownerDocument контейнера. Потім створюється новий елемент <p> і додається до body нового документа. Нарешті, вміст documentElement нового документа виводиться в елемент output.

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід