DOM nima?

JuniorHTML #html #dom

Savol

DOM nima va u HTML bilan qanday bog'liq?

Qisqa javob

DOM (Document Object Model) — brauzer xotirasidagi HTML hujjatining obyekt ko'rinishi: JavaScript o'zaro ta'sir qilishi mumkin bo'lgan (sahifani o'qish va o'zgartirish) tugunlar (elementlar, matn, atributlar) daraxti.

Batafsil javob

Brauzer HTML'ni yuklaganida, u matnni tahlil qiladi va undan obyektlar daraxtini — DOM'ni quradi. Bu HTML faylning o'zi emas, balki uning xotiradagi ko'rinishi:

  • Har bir teg element-tugunga (Element) aylanadi.
  • Teglar ichidagi matn — matn tuguniga (Text).
  • Tugunlarning ota-onalari, bolalari va qo'shnilari bor — shundan "daraxt" nomi kelib chiqadi.

DOM — bu JavaScript tilining qismi emas, balki brauzer taqdim etadigan API (Web API'ning bir qismi). Uning orqali JS quyidagilarni qila oladi:

  • elementlarni topish (document.querySelector, getElementById);
  • mazmun va atributlarni o'zgartirish (element.textContent, element.setAttribute);
  • tugunlarni yaratish/o'chirish (document.createElement, element.remove());
  • hodisalarga obuna bo'lish (element.addEventListener).

DOM'ni HTML'dan farqlash muhim: HTML — bu asl belgilash (matn), DOM esa JS manipulyatsiyalaridan keyin asl HTML'dan farq qilishi mumkin bo'lgan xotiradagi jonli tuzilma (masalan, SPA'da belgilash deyarli to'liq skriptlar tomonidan generatsiya qilinadi).

Misol

<ul id="list">
  <li>Bir</li>
  <li>Ikki</li>
</ul>
const list = document.getElementById('list')

// DOM'ni o'qish
console.log(list.children.length) // 2

// DOM'ni o'zgartirish
const item = document.createElement('li')
item.textContent = 'Uch'
list.appendChild(item)

// Endi DOM asl HTML'dan farq qiladi,
// garchi belgilash faylida uchinchi <li> bo'lmasa ham

Qo'shimcha savollar

  • DOM Vue/React ishlatadigan Virtual DOM'dan nimasi bilan farq qiladi?
  • Reflow va repaint nima va nega DOM bilan tez-tez manipulyatsiya qilish qimmatga tushadi?
  • DOM orqali hodisalarni delegatsiya qilish (event bubbling) qanday ishlaydi?