DOM או Document Object Model הוא למעשה API (ממשק תכנות יישומים) אשר מגדיר את המבנה הלוגי של מסמכי HTML ו-XML ואת דרך הגישה אליהם.
את ה-DOM נוכל לתאר מבחינה לוגית כעץ – או יותר נכון אוסף של עצים שמסמלים לנו את המבנה הלוגי של מסמך ה-HTML שלנו.
כלומר שה-DOM מספק לנו את הגישה שאנו צריכים כדי לגשת לרכיבי HTML דרך קוד JavaScript.
נוכל לבאר זאת באמצעות תרשים זרימה:
כפי שתוכלו להבחין, מודל המסמך (document) הוא אחד מהמודלים הקיימים ב-JS.
וכפי שניתן להסיק, פקדי ה-HTML ימוקמו מתחתיו בהיררכיה.
יש פקדי HTML רבים אשר מוכרים ב-JS ואינם מופיעים בתרשים זה אשר נועד להמחשה בלבד.
שימוש ב-DOM
ב-DOM נוכל להשתמש על מנת שנוכל לגשת אל אלמנטים שברצוננו לבצע בהם מניפולציות למשל,
כאשר ל-document יש מספר מתודות ומאפיינים שנוכל להיעזר בהם לשם כך:
מאפיינים
- Cookie – מחזיר "עוגיות" מהמסך
- documentMode – מחזיר את שיטת הרינדור שבה משתמש הדפדפן
- domain – מחזיר את שם הכתובת (הדומיין)
- lastModified – מחזיר את התאריך והשעה שבהם השתנה המסמך לאחרונה
- title – מחזיר את כותרת המסמך
- URL – מחזיר את כתובת המסמך
מתודות
- ()close – סוגר את זרם הנתונים שנפתח על ידי המתודה ()document.open
- ()getElementById – ניגש אל האלמנט הראשון אשר נושא מזהה Id זה
- ()getElementByName – ניגש אל כל האלמנטים אשר נושאים שם זה
- ()getElementByTagName – ניגש אל כל האלמנטים אשר נושאים תגית זו
- ()open – פותח זרם לפלט נתונים למטרת איסוף מידע על ידי שימוש במתודה ()document.write
- ()write – כותב קוד JavaScript ל-HTML
- ()writeIn – זהה ל-()write רק שכאן נוספת שורה חדשה לאחר כל ביטוי.
- ()querySelector – ניגש אל האלמנט הראשון אשר נושא את מצביע זה
- ()querySelectorAll – ניגש אל כל האלמנטים אשר עונים למצביע זה (למשל – "div")
ביצוע מניפולציות במסמך HTML ע"י שימוש ב-DOM
עד עתה ראינו כי יש ביכולתנו לגשת לאלמנטים, כעת נראה כיצד נוכל להשתמש בעובדה זו.
צרו את מסמך ה-HTML הבא:
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="styles.css"> <meta charset="utf-8" /> <title>Title</title> </head> <body> <div id="main"> <div class="box"></div> </div> </body> </html>
מה שאנחנו הולכים לעשות זה :
- לשנות את ה-title
- להוסיף טקסט לאלמנט אשר מחזיק Id בשם "main"
- להחליף את צבע האלמנט שנקרא "box" כאשר נעבור מעליו באמצעות העכבר
כתבו את קובץ ה-js שלכם כך:
// שינוי כותרת המסמך document.title = "My New Title"; // הוספת טקסט לאלמנט const main = document.getElementById("main"); main.innerHTML += "This is my added text" // החלפת צבע אלמנט בעת מעבר העכבר מעל האלמנט const box = document.querySelector(".box"); box.addEventListener('mouseover', _ => { box.classList.toggle('changeColor'); });
על מנת שצבע האלמנט "box" ישתנה בכל פעם שנעבור מעליו באמצעות העכבר, ניצור את קובץ ה-CSS הבא:
div#main { height: 50%; display: flex; flex-direction:column; } div#main .box { width: 100px; height: 100px; top: 0px; left: 0px; background: red; } div#main .box.changeColor { background: blue; }
כפי שניתן לראות, השתמשנו במאפיין title על מנת לשנות את כותרת ראש המסמך.
את הטקסט ל-main הוספנו על ידי שימוש במאפיין innerHTML אשר נועד לשם כך בדיוק,
שימו לב שאם היינו משתמשים ב-"=" היינו דורסים טקסט שהיה שם לפני כן (במידה והיה),
ולכן השתמשנו באופרטור "=+".
* קיים הבדל בין innerHTML לבין innerText, שכן הם שונים –
innerText יחזיר לנו אלמנט HTML שלם (כלומר את כל הקוד), לעומת innerHTML שמחזיר לנו מחרוזת שהיא הטקסט למעשה.
את שינוי הצבע לאלמנט box ביצענו על ידי שימוש ב-EventListener.
*להסבר מפורט על EventListener ב-JavaScript יש ללחוץ כאן.
כעת נוכל לקבל את התוצאה הבאה:
לסיכום ניתן לומר כי הבנה של מהו DOM וכיצד ניתן להשתמש בו יכולה לתרום רבות לפיתוח האתר שלנו ואף הכרחית במקרים מסוימים.
לקריאה מורחבת על JavaScript DOM יש ללחוץ כאן