DOM أو Document Object Model هو نموذج هيكلي (شجري) يمثل صفحة الويب في المتصفح.
بمجرد تحميل الصفحة، يقوم المتصفح بترجمتها إلى شجرة من العناصر (Nodes) يمكن التعامل معها باستخدام JavaScript.
ما هو الـ DOM؟
DOM هو اختصار لـ Document Object Model
يمثل الصفحة كهيكل شجري بحيث يكون:
- كل عنصر HTML (مثل
<div>
,<p>
,<a>
, إلخ) يمثل عنصرًا (Node) - يمكن الوصول لهذه العناصر والتعديل عليها باستخدام JavaScript
مثال: لو كانت لديك الصفحة التالية:
<html>
<body>
<h1>مرحبا</h1>
<p>هذا نص</p>
</body>
</html>
JavaScriptسيتم تحويلها إلى شجرة DOM مثل:
document
└── html
└── body
├── h1
└── p
JavaScriptطرق تحديد أو اختيار العناصر (Select Elements) في DOM
يمكنك الوصول للعناصر باستخدام عدة طرق في JavaScript، مثل:
✅ 1. getElementById
- يحدد عنصرًا واحدًا بناءً على خاصية
id
- يرجع عنصر واحد فقط أو
null
إذا لم يوجد
<h1 id="main-title">مرحبا</h1>
/////////////////////////
const heading = document.getElementById("main-title");
JavaScript✅ 2. getElementsByClassName
- يُرجع قائمة بالعناصر التي لها نفس الكلاس
- النتيجة تكون من نوع
HTMLCollection
<div class="item">عنصر 1</div>
<div class="item">عنصر 2</div>
//////////////////////////////////
const items = document.getElementsByClassName("item");
JavaScript✅ 3. getElementsByTagName
- يُرجع قائمة بكل العناصر ذات نفس الوسم (Tag).
const paragraphs = document.getElementsByTagName("p");
JavaScript✅ 4. querySelector
- يُرجع أول عنصر يطابق المحدد (Selector) مثل الـ CSS
- يقبل أي محدد CSS:
#id
,.class
,div p
,input[type="text"]
وغيرها
const firstParagraph = document.querySelector("p");
const mainTitle = document.querySelector("#main-title");
const activeItem = document.querySelector(".item.active");
JavaScript✅ 5. querySelectorAll
- يُرجع جميع العناصر التي تطابق المحدد
- يُرجعها على شكل
NodeList
const allItems = document.querySelectorAll(".item");
JavaScriptملاحظات:
- HTMLCollection و NodeList ليست Arrays، ولكن يمكن تحويلها بـ
Array.from()
أو استخدامforEach
مباشرة معNodeList
- دائمًا يُفضّل استخدام
querySelector
وquerySelectorAll
لأنها مرنة جدًا وتدعم أي محدد CSS
بالإضافة للطرق الأساسية التي ذكرناها، هناك طرق أخرى للوصول للعناصر في DOM، لكنها أقل استخدامًا أو تستخدم في حالات خاصة. سأشرحها بالتفصيل:
🟦 1. الوصول للعناصر من خلال document.forms
أو document.formName
✅ document.forms
ترجع جميع النماذج (forms) في الصفحة.
<form name="loginForm">
<input type="text" name="username" />
</form>
///////////////////////////////////////
const myForm = document.forms[0]; // أول نموذج
const anotherForm = document.forms["loginForm"]; // باسم النموذج
JavaScript🟦 2. form.elements
للوصول إلى الحقول داخل النموذج
const usernameField = document.forms["loginForm"].elements["username"];
JavaScript🟦 3. الوصول من خلال خصائص خاصة مثل:
✅ document.body
يرجع عنصر <body>
مباشرة.
const body = document.body;
JavaScript✅ document.head
يرجع عنصر <head>
مباشرة.
✅ document.images
ترجع جميع الصور <img>
في الصفحة.
const allImages = document.images;
JavaScript✅ document.links
ترجع كل الروابط <a>
التي تحتوي على href
.
const allLinks = document.links;
JavaScript✅ document.scripts
ترجع جميع عناصر <script>
.
🟦 4. الوصول لعناصر فرعية باستخدام parent
, children
, firstChild
, nextSibling
…
بعد تحديد عنصر، يمكنك الوصول للعناصر المجاورة أو الفرعية:
خاصية | ماذا تُرجع |
---|---|
element.children | جميع الأبناء (بدون النصوص) |
element.childNodes | جميع الأبناء (بما فيهم النصوص) |
element.firstElementChild | أول عنصر ابن |
element.lastElementChild | آخر عنصر ابن |
element.parentElement | العنصر الأب |
element.nextElementSibling | العنصر التالي |
element.previousElementSibling | العنصر السابق |
const list = document.getElementById("myList");
const firstItem = list.firstElementChild;
const nextItem = firstItem.nextElementSibling;
JavaScript🔸 خلاصة:
الطريقة | وصف الاستخدام |
---|---|
getElementById() | أفضل طريقة للحصول على عنصر بالـ ID |
getElementsByClassName() | للحصول على عناصر بكلاس مشترك |
querySelector() | أفضل طريقة مرنة باستخدام CSS |
document.forms , document.images , document.links | للوصول المباشر لعناصر خاصة |
element.children , nextElementSibling | للتنقل بين عناصر الشجرة |
document.evaluate() | لاستخدام XPath (نادر ومتقدم) |