תכונת innerHTML היא אחת מתכונות שפת JavaScript בה ניתן להשתמש כדי לבצע החלפה של ערך שורה אחד ב DOM בערך שורה אחר ב DOM.
ערך שורה חדש יכול להיות זהה מהותית לקודמו כך שמה שמוחלף הוא בהכרח ערך שורה ב DOM אך לא בהכרח תוכן ה HTML שלו.
אם היו JavaScript event listeners שרלוונטים לקטע שהוחלף, הם באופן טבעי לא ישפיעו על הקטע החדש, אפילו אם ה HTML זהה.
לפי דעתי innerHTML
איננה חומר לימוד אלמנטרי לסטודנטים לשפת JavaScript ויש ללמדה רק אחרי תכונות כמו textContent
, innerText
וכן insertAdjacentHTML
התכונה textContent
פולטת את התוכן הטקסטואלי של כל אלמנט שהוא (כולל למשל script
וstyle
) בעוד שהתכונה innerText
פולטת רק את זה של אלמנטים שבתכנון נועדו להיות "קריאים לבני אדם" (כגון body
וילדיו).
יצוין כי התכונה innerText
מבדילה בין טקסט חבוי כגון טקסט שקיבל display: none
לבין טקסט שלא כך שהיא לא תציג טקסט שלא.
אם מריצים innerHTML
על השורה שמכילה את אלמנט ה body אז כל ה JavaScript event listeners באופן טבעי יפסיקו לעבוד.
יש דרך JavaScript לעקוף זאת עם event delegation אך זה המצב הטבעי.
לפעמים זה יכול לגרום אשלייה שכל תפריט בתצוגת מכשירים ניידים לא יעבוד אך לא בהכרח כך הדבר, שכן תפריטי תצוגת מכשירים ניידים נטוליי JavaScript שעובדים רק על HTML-CSS ימשיכו לעבוד.