Робота із DOM-моделлю. Введення Dom сторінки

При відкритті будь-якого HTML документа браузер попередньо розбирає його вміст і на основі цього аналізу створює об'єктну модель HTML документаабо коротше DOM.

DOM складається з вкладених один в одного ієрархічно розташованих об'єктів, які називаються вузлами. Кожен вузол у структурі представляє розміщений на сторінці HTML елемент.

Використовуючи DOM Ви можете взаємодіяти ( зчитувати, змінювати, видаляти) З вмістом HTML документів зі скриптів.

Нижче розташовується код HTML документа і DOM, яка була створена браузером на основі цього коду:

HTML DOM

HTML DOM.

Привіт всім.

Всі прямокутники, зображені на картинці, є об'єктами (або вузлами). Різним кольором на зображення відзначені різні вузли типу.

Червоним кольором відзначено вузол Document. Будь-яке звернення до DOM має починатися з звернення до цього сайту.

Зеленим кольором відзначено елементні вузли. Для кожного HTML елемента на сторінці веб-переглядач створює відповідний елементний вузол.

Вміст елементів зберігається в текстових вузлах. Текстові вузли відзначені на нашій схемі синього кольору.

Для кожного атрибуту HTML елемент створюється атрибутний вузол. Атрибутний вузол відзначений схемою рожевим кольором.

Зверніть увагу:не забувайте, що текст завжди зберігається в текстових вузлах, а не властивість елемента. Тобто. Для того, щоб звернутися до вмісту HTML елементу, Ви повинні звернутися до властивості його текстового вузла.

Відносини між вузлами

Вузли в об'єктній структурі пов'язані один з одним. Існує кілька спеціальних термінів для опису відносин між вузлами:

Батьківський вузол ( parent node) - Батьківським вузлом по відношенню до об'єкта, що розглядається, є вузол, в який вкладений аналізований об'єкт. На нашій схемі щодо вузлів

і

є батьківським. Для вузла батьківським є вузол <head>.</p> <p><b>Вузли-нащадки ( <i>child node</i>) </b>- вузлом-нащадком по відношенню до об'єкта, що розглядається, є вузол, який вкладений в аналізований об'єкт. На нашій схемі щодо вузла <body> <h1>і <p>Є нащадками. Для вузла <head>нащадком є <title>.</p> <p><b>Вузли-брати ( <i>sibling node</i>) </b>- вузли що на рівні рівні вкладеності стосовно їх батьківському вузлу. На нашій схемі вузлами-братами є <body>і <head>, <p>Найвищий вузол у DOM називається <b>кореневим</b>. На нашій схемі кореневим є <html>(т.к. об'єкт document не є частиною DOM).</p> <p>Модель DOM часто називають деревом DOM, оскільки вона складається з дерева об'єктів, які називаються вузлами. Ви дізналися, що таке Document Object Model (DOM), як отримати доступ до об'єкта document і змінити його властивості за допомогою консолі, також ми різницю між вихідним кодом HTML і DOM.</p> <p>У цьому мануалі ви знайдете термінологію HTML, яка необхідна для роботи з JavaScript та DOM, дізнаєтесь, що таке дерево та вузли DOM, та навчитеся визначати найпоширеніші типи вузлів. Також ви зможете створити програму JavaScript у консолі для інтерактивної зміни DOM.</p> <h2>Термінологія HTML</h2> <p>Розуміння термінів HTML і JavaScript є критично необхідним для роботи з DOM. Давайте коротко розглянемо основні терміни.</p> <p>Подивіться цей елемент HTML:</p> <p>Home</p> <p>У ньому є анкор, який є посиланням на index.html.</p> <ul><li>a – тег</li> <li>href – атрибут</li> <li>html – значення атрибуту</li> <li>Home – текст.</li> </ul><p>Все, що знаходиться між тегами, що відкривається і закривається, становить HTML-елемент.</p> <p>Повернемося до файлу index.html з попереднього мануалу:</p> <p><!DOCTYPE html><br> <html lang="en"><br> <head><br> <title>Learning the DOM


Document Object Model



Найпростіший спосіб доступу до елемента JavaScript – це атрибут id. Давайте додамо вказане вище посилання на файл index.html з id=»nav».

...

Document Object Model


Home

...

Завантажте (або оновіть) сторінку у вікні браузера і перегляньте DOM, щоб переконатися, що код був оновлений.

Потім використовуйте метод getElementById() для доступу до всього елемента. Введіть в консолі наступне:

document.getElementById("nav");
Home

Метод getElementById() витягне весь елемент. Тепер замість того, щоб вводити цей об'єкт і метод щоразу, коли вам потрібно отримати доступ до посилання nav, ви можете помістити елемент у змінну, щоб з ним було легше працювати.

let navLink = document.getElementById("nav");

Змінна navLink містить анкор. Тут можна легко змінювати атрибути та значення. Наприклад, щоб змінити місце посилання, змініть атрибут href:

navLink.href = "https://www.wikipedia.org";

Також можна змінити текст, переназначивши властивість textContent:

navLink.textContent = "Navigate to Wikipedia";

Тепер, переглянувши елемент у консолі або перевіривши тег Elements, ви побачите, як він оновився.

navLink;
Navigate to Wikipedia

Зміни позначаться і на фронт-енді.

Оновлення сторінки поверне усі вихідні значення.

На цьому етапі ви повинні розуміти, як використовувати метод document для доступу до елемента, як присвоїти елемент змінної та як змінити властивості та значення в елементі.

Дерево та вузли DOM

Всі елементи DOM визначаються як вузли. Існує безліч типів вузлів, але є три основних, з якими ви працюватимете найчастіше:

  1. Вузол елемента
  2. Текстовий вузол
  3. Вузол коментаря

Коли елемент HTML є елементом DOM, він називається вузлом елемента. Будь-який одиночний текст поза елементом є текстовим вузлом, а коментар HTML – вузлом коментаря. Крім цих трьох типів вузлів, сам об'єкт document – ​​це вузол документа, який є кореневим вузлом решти вузлів.

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

Наприклад створіть файл nodes.html. додайте до нього текстовий вузол, а також вузли коментаря та елемента.




Learning About Nodes


An element node



A text node.

Вузол елемента HTML є батьківським. head та body – дочірні вузли html. body містить три дочірні вузли, і всі вони знаходяться на одному рівні – тип вузла не впливає на рівень вкладення.

Примітка: При роботі з DOM, згенерованим HTML, відступи вихідного коду HTML створюють багато порожніх текстових вузлів, які не будуть видно у вкладці DevTools Elements. Більше про це за посиланням.

Визначення типу вузла

Кожен вузол у документі має тип, доступ якого здійснюється через властивість nodeType. Mozilla Developer Network містить оновлений список усіх констант типів вузлів. Нижче наведено таблицю найпоширеніших типів вузлів.

У вкладці Elements у Developer Tools ви можете помітити, що кожного разу, коли ви натискаєте та виділяєте будь-який рядок у DOM, поруч із нею з'являється значення == $0. Це дуже зручний спосіб отримати доступ до активного елемента.

У консолі node.html натисніть на перший елемент body (h1).

За допомогою консолі дізнайтесь тип вибраного вузла за допомогою властивості nodeType.

$0.nodeType;
1

Вибравши елемент h1, ви побачите 1 як висновок, який відноситься до ELEMENT_NODE. Зробіть те саме з іншими вузлами, і вони повернуть 3 і 8 відповідно.

Знаючи, як отримати доступ до елемента, можна побачити тип вузла, не виділяючи елементи в DOM.

document.body.nodeType;
1

На додаток до nodeType ви також можете використовувати властивість nodeValue, щоб дізнатися про значення текстового вузла або вузла коментаря, а nodeName – для отримання тега елемента.

Зміна DOM за допомогою подій

До цього часу ви бачили, як змінювати DOM в консолі, а такі зміни, як відомо, тимчасові; щоразу, коли сторінка оновлюється, всі зміни губляться. Ви оновлювали колір фону сторінки в консолі. Спробуйте об'єднати те, чого ви навчилися в цьому мануалі, з тим, що ви вже знаєте, щоб створити інтерактивну кнопку, яка змінюватиме колір фону.

Поверніться у файл index.html та додайте елемент button з id. Також потрібно додати посилання на новий файл до нового js-каталогу js/scripts.js.




Learning the DOM


Document Object Model





Подія JavaScript – це дія, яку виконує користувач. Користувач наводить вказівник миші на елемент, натискає на нього або певну клавішу на клавіатурі – це всі події. У цьому випадку кнопка повинна виконати дію, коли користувач натисне на неї. Для цього слід додати слухача подій. Створіть файл scripts.js та збережіть його в новому каталозі js. У файлі потрібно визначити елемент button і присвоїти його змінній.

Використовуючи метод addEventListener(), кнопка прослуховуватиме кліки та виконуватиме свою функцію після кліка.

...
button.addEventListener("click", () => (
// action will go here
});

Всередині функції потрібно помістити код попереднього мануалу, щоб змінити колір фону на fuchsia.

...

Так виглядає скрипт:

let button = document.getElementById("changeBackground");
button.addEventListener("click", () => (
document.body.style.backgroundColor = "fuchsia";
});

Збережіть та закрийте файл. Оновіть сторінку index.html у браузері. Натисніть нову кнопку, і колір фону сторінки зміниться.

Tags: ,

Довідник містить опис всіх властивостей та методів стандартних вбудованих об'єктів JavaScript.

Об'єктна модель документа

Об'єктна модель документа(Document Object Model, DOM) – це інтерфейс програмування додатків (Application Programming Interface, API) для XML, розширений також роботи з HTML.

У DOM весь вміст сторінки (елементи та текст) представляється як ієрархія вузлів. Розглянемо наступний код:

Проста сторінка

Привіт світ!

Цей код можна зобразити за допомогою DOM як ієрархію вузлів:

Представляючи документ у вигляді дерева вузлів, DOM API надає розробникам повний контроль над вмістом та структурою веб-сторінки.

При описі деревоподібної структури DOM використовується термінологія, яка була запозичена з генеалогічних дерев.

Так, вузол, розташований безпосередньо над цим вузлом, називається батьківським стосовно даного вузла. Вузли, розташовані на один рівень нижче цього вузла, називаються дочірніми по відношенню до цього вузла. Вузли, що знаходяться на одному рівні і мають одного й того самого батька, називаються сестринськими або братами. Вузли, розташовані на будь-яке число рівнів нижче за цей вузл, називаються його нащадками . Батьківські, прабатьківські та будь-які інші вузли, розташовані на будь-яке число рівнів вище за цей вузл, називаються його предками.

Довідник по DOM містить опис об'єктів Document, Element, Event і NodeList, включаючи опис їх методів та властивостей:

Довідник BOM

BOM (Browser Object Model у перекладі з анг. - Об'єктна Модель Браузера) забезпечує доступ до вікна браузера та дозволяє маніпулювати ним та його елементами.

BOM-об'єкти забезпечують доступ до функція браузера незалежно від вмісту веб-сторінки. Тема BOM цікава і водночас складна, тому що через тривалу відсутність специфікації виробники браузерів вільно розширювали BOM на власний розсуд. Багато елементів, схожих у різних браузерах, стали стандартами де-факто, які дотримуються і досі з міркувань взаємної сумісності. Щоб стандартизувати ці фундаментальні аспекти JavaScript, консорціум W3C визначив основні BOM-елементи специфікації HTML5.

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

Що таке DOM?

Браузер, коли запитує сторінку та отримує у відповіді від сервера її вихідний HTML-код, повинен спочатку його розібрати. У процесі аналізу та аналізу HTML-коду браузер будує на основі нього DOM-дерево.

Після виконання цієї дії та інших браузер приступає до відтворення сторінки. У цьому процесі він, звичайно, вже використовує створене ним DOM-дерево, а не вихідний HTML-код.

DOM – це об'єктна модель документа, яку браузер створює в пам'яті комп'ютера на підставі коду HTML, отриманого ним від сервера.

Якщо сказати по-простому, HTML-код – це текст сторінки, а DOM – це набір пов'язаних об'єктів, створених браузером при парсингу її тексту.

У Chrome вихідний код сторінки, який отримує браузер, можна переглянути у вкладці «Source» на панелі «Інструменти веб-розробника».


У Chrome інструменту, за допомогою якого можна було б переглянути створене ним DOM-дерево, немає. Але є представлення цього DOM-дерева у вигляді HTML-коду, воно є на вкладці «Elements». З таким уявленням DOM веб-розробнику, звичайно, набагато зручніше працювати. Тому інструменту, який DOM представляв у вигляді деревоподібної структури немає.


Об'єкти в цій моделі утворюються практично з усього, що є в HTML (тегів, текстового контенту, коментарів і т.д.), включаючи сам документ. Зв'язки між цими об'єктами моделі формуються на підставі того, як HTML-елементи розташовані у коді відносно один одного.

При цьому DOM документа після його формування можна змінювати. У разі зміни DOM браузер практично миттєво перемальовує зображення сторінки. В результаті у нас відображення сторінки завжди відповідає DOM.

Для читання та зміни DOM програмний браузер надає нам DOM API або, іншими словами, програмний інтерфейс. DOM API - це набір величезної кількості різних об'єктів, їх властивостей і методів, які ми можемо використовувати для читання та зміни DOM.

p align="justify"> Для роботи з DOM в більшості випадків використовується JavaScript, т.к. на сьогоднішній день це єдина мова програмування, скрипти якою можуть виконуватися в браузері.

Навіщо нам потрібний DOM API?Він нам потрібен для того, щоб ми могли за допомогою JavaScript змінювати сторінку на літу, тобто. робити її динамічною та інтерактивною.

DOM API надає нам (розробникам) безліч методів, за допомогою яких ми можемо змінювати все що є на сторінці, а також взаємодіяти з користувачем. Тобто. Цей програмний інтерфейс дозволяє нам створювати складні інтерфейси, форми, виконувати обробку дій користувачів, додавати та видаляти різні елементи на сторінці, змінювати їх вміст, властивості (атрибути) та багато іншого.

Зараз у вебі практично немає сайтів у сценаріях яких була б робота з DOM.

Із чого складається HTML-код сторінки?

Перед тим, як перейти до вивчення об'єктної моделі документа необхідно спочатку згадати, що являє собою вихідний код веб-сторінки (HTML-документа).

Вихідний код веб-сторінки складається з тегів, атрибутів, коментарів та тексту. Теги – це базова синтаксична конструкція HTML. Більшість із них є парними. У цьому випадку один з них відкриває, а інший - закриває. Одна така пара тегів утворює HTML-елемент. HTML-елементи можуть мати додаткові параметри – атрибути.

У документі для створення певної розмітки одні елементи знаходяться усередині інших. В результаті HTML-документ можна подати як безліч вкладених один в одного HTML-елементів.

Як приклад розглянемо наступний HTML код:

заголовок сторінки

Назва статті

Розділ статті

Вміст статті

У цьому коді кореневим елементом є html. У нього вкладені елементи head та body. Елемент head містить title, а body – h1 і div. Елемент div у свою чергу містить h2 і p.

Тепер розглянемо, як браузер на основі HTML коду будує DOM-дерево.

Як будується DOM-дерево документа?

Як вже було описано вище, браузер будує дерево на основі HTML-елементів та інших сутностей вихідного коду сторінки. За виконання цього процесу він враховує вкладеність елементів друг в друга.

В результаті браузер, отримане DOM-дерево використовує не тільки у своїй роботі, але також надає нам API для зручної роботи з ним через JavaScript.

Під час будівництва DOM браузер створює з HTML-елементів, тексту, коментарів та інших сутностей цієї мови об'єкти (вузли DOM-дерева).

Найчастіше веб-розробників цікавлять лише об'єкти (вузли), утворені з HTML-елементів.

При цьому браузер не просто створює об'єкти з HTML-елементів, а також пов'язує їх між собою певними зв'язками залежно від того, як кожен з них відноситься до іншого коду.

Елементи, які знаходяться безпосередньо в деякому елементі, є по відношенню до нього дітьми. А він для кожного є батьком. Крім цього, всі ці елементи стосовно один одного є сиблінгами (братами).

При цьому HTML будь-який елемент завжди має одного з батьків (HTML-елемент, в якому він безпосередньо розташований). У HTML елемент може бути кілька батьків. Виняток становить лише елемент html. В нього немає батька.

Щоб отримати DOM-дерево, оскільки його будує браузер, необхідно просто «вибудувати» всі елементи залежно від їхнього ставлення один до одного.

Створення DOM-дерева виконується зверху донизу.

У цьому коренем DOM-дерева завжди є сам документ (вузол document). Далі дерево будується залежно від структури HTML-коду.

Наприклад, HTML-код, який ми розглядали вище, матиме наступне DOM-дерево:


У самому верху цього дерева знаходиться вузол document. Цей вузол пов'язаний з html, він є його дитиною. Вузол html утворений елементом html ( ...). Вузли head ( ...) та body ( ...) мають батьківський зв'язок із html . По відношенню один до одного є сиблингами, т.к. мають одного з батьків. Вузол head пов'язаний з title (lt;title>...), він є його дитиною. Вузли h1 і div пов'язані з body, їм він є батьком. Вузол div пов'язаний з h2 (

...

) та p(), вони є його дітьми.

Починається дерево як було зазначено вище з об'єкта (вузла) document . Він у свою чергу має один дочірній вузол, утворений елементом html ( ...). Елементи head ( ...) та body ( ...) знаходяться у html і, отже, є його дітьми. Далі вузол head є батьківським для title (lt;title>...). Елементи h1 і div вкладені в body, отже є його дітьми. У div безпосередньо розташовані елементи h2 (

...

) та p(). Це означає, що вузол div для кожного є батьківським.

Ось так просто будується DOM-дерево в браузері на основі HTML-коду.

Навіщо знати, як будується DOM дерево?По-перше, це розуміння того середовища, в якому ви хочете щось змінювати. По-друге, більшість дій під час роботи з DOM зводиться до пошуку (вибору) потрібних елементів. Не знаючи як влаштовано DOM-дерево та зв'язки між вузлами знайти якийсь певний елемент у ньому буде досить складно.

Завдання

На основі DOM-дерева, представленого на малюнку, створіть HTML-код.


Робота з DOM-моделлю

Кожен об'єкт Window має властивість document, що посилається на об'єкт Document. Цей об'єкт не є автономним об'єктом. Це центральний об'єкт великого API, відомого як об'єктна модель документа (DOM), який визначає порядок доступу до вмісту документа.

Огляд моделі DOM

Об'єктна модель документа (Document Object Model, DOM)- це фундаментальний прикладний програмний інтерфейс, який забезпечує можливість роботи з вмістом HTML та XML-документів. Прикладний програмний інтерфейс (API) моделі DOM не є особливо складним, але в ньому існує безліч архітектурних особливостей, які ви повинні знати.

Перш за все слід розуміти, що вкладені елементи HTML або XML-документів представлені у вигляді дерева об'єктів DOM. Деревоподібне представлення HTML-документа містить вузли, що представляють елементи або теги, такі як і

І вузли, що становлять рядки тексту. HTML-документ може містити вузли, що представляють HTML-коментарі. Розглянемо наступний простий HTML-документ:

Приклад документа

Це HTML-документ

Приклад простоготексту.

DOM-подання цього документа наводиться на наступній діаграмі:

Тим, хто ще не знайомий з деревоподібними структурами в комп'ютерному програмуванні, корисно дізнатися, що термінологія для їхнього опису була запозичена у генеалогічних дерев. Вузол, розташований безпосередньо над цим вузлом, називається батьківськимпо відношенню до цього вузла. Вузли, розташовані на один рівень нижче іншого вузла, є дочірнімипо відношенню до цього вузла. Вузли, що знаходяться на тому ж рівні і мають того ж батька, називаються сестринськими. Вузли, розташовані на будь-яке число рівнів нижче за інший вузл, є його нащадками. Батьківські, прабатьківські та будь-які інші вузли, розташовані вище даного вузла, є його предками.

Кожен прямокутник на цій діаграмі є вузлом документа, представленого об'єктом. Node. Зверніть увагу, що на малюнку зображено три різні типи вузлів. Коренем дерева є вузол Document, який представляє документ цілком. Вузли, що представляють HTML-елементи, є вузлами типу Element, а вузли, що представляють текст, є вузлами типу Text. Document, Element та Text - це підкласи класу Node. Document та Element є двома найважливішими класами в моделі DOM.

Тип Node та його підтипи утворюють ієрархію типів, зображену на діаграмі нижче. Зверніть увагу на формальні відмінності між узагальненими типами Document та Element, та типами HTMLDocument та HTMLElement. Тип Document представляє HTML і XML-документ, а клас Element є елементом цього документа. Підкласи HTMLDocument і HTMLElement представляють саме HTML-документ та його елементи:

На цій діаграмі слід відзначити наявність великої кількості підтипів класу HTMLElement, що представляють конкретні типи HTML-елементів. Кожен із них визначає JavaScript-властивості, що відображають HTML-атрибути конкретного елемента або групи елементів. Деякі з цих специфічних класів визначають додаткові властивості чи методи, які є відображенням синтаксису мови розмітки HTML.

Вибір елементів документа

Робота більшості клієнтських програм мовою JavaScript так чи інакше пов'язана з маніпулюванням елементами документа. У ході виконання ці програми можуть використовувати глобальну змінну документ, що посилається на об'єкт Document. Однак, щоб виконати будь-які маніпуляції з елементами документа, програма повинна якимось чином отримати або вибрати об'єкти Element, що посилаються на ці елементи документа. Модель DOM визначає кілька способів вибірки елементів. Вибрати елемент або елементи документа можна:

    за значенням атрибуту id;

    за значенням атрибута name;

    на ім'я тега;

    на ім'я класу або класів CSS;

    збігу з певним селектором CSS.

Всі ці прийоми вибірки елементів описуються у наступних підрозділах.

Вибір елементів за значенням атрибута id

Усі HTML-елементи мають атрибути id. Значення цього атрибута має бути унікальним у межах документа - жодні два елементи в тому самому документі не повинні мати однакові значення атрибута id. Вибрати елемент за унікальним значенням атрибута id можна за допомогою методу getElementById()об'єкту Document:

Var section1 = document.getElementById("section1");

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

У версіях Internet Explorer нижче IE8 метод getElementById() шукає значень атрибутів id без урахування регістру символів і, крім того, повертає елементи, в яких буде знайдено збіг зі значенням атрибута name.

Вибір елементів за значенням атрибута name

HTML-атрибут name спочатку призначався для присвоєння імен елементам форм, і значення цього атрибута використовувалося, коли відправлялися дані форми на сервер. Подібно до атрибуту id, атрибут name присвоює ім'я елементу. Однак, на відміну від id, значення атрибута name не повинно бути унікальним: одне й те саме ім'я можуть мати відразу кілька елементів, що цілком звичайно при використанні у формах радіокнопок та прапорців. Крім того, на відміну від id, атрибут name допускається вказувати лише в деяких HTML-елементах, включаючи форми, елементи форм та елементи