🏠 5 способов создания DOM-элСмСнтов ΠΈΠ· HTML-строк ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ JavaScript

РассказываСм ΠΎ пяти ΠΌΠ΅Ρ‚ΠΎΠ΄Π°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π³ΠΈΠ±ΠΊΠΎ ΠΈ бСзопасно Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ динамичСский ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π½Π° страницы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π²Π°Π½ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ JavaScript.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ DOM-элСмСнтов ΠΈΠ· строк обСспСчиваСт:

  1. ДинамичСскоС созданиС ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π° – ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ элСмСнты Π½Π° страницу Π±Π΅Π· ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ.
  2. Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ – ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ HTML Π½Π° основС Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ»ΠΈ с сСрвСра.
  3. Π¨Π°Π±Π»ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ – ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ созданиС ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΡ…ΡΡ структур HTML.
  4. Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ интСрфСйсом – ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π³ΠΈΡ€ΡƒΡŽΡ‚ Π½Π° дСйствия ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠŸΠΎΡ‡Ρ‚ΠΈ всС соврСмСнныС JavaScript-Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ инструмСнты для создания DOM-элСмСнтов ΠΈΠ· HTML-строк – это ΠΎΠ΄Π½Π° ΠΈΠ· основных Π·Π°Π΄Π°Ρ‡, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ΠΈ Ρ€Π΅ΡˆΠ°ΡŽΡ‚. Если ΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΠΎΠΉΡ‚ΠΈΡΡŒ возмоТностями ванильного JavaScript, Ρ‚ΠΎ это ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ нСсколькими Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами.

innerHTML

Π­Ρ‚ΠΎ самый извСстный ΠΌΠ΅Ρ‚ΠΎΠ΄: ΠΎΠ½ позволяСт Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ строку HTML Π²Π½ΡƒΡ‚Ρ€ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° innerHTML ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ созданному ΡƒΠ·Π»Ρƒ DOM. Однако ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ допустимыС ΡƒΠ·Π»Ρ‹ HTML – ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ элСмСнт <tr> Π² <div> ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΡƒΠ·Π΅Π» Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ создан. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π΅ выполняСт скрипты Π² HTML строках, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ бСзопасным ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π½Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ содСрТимым.

innerHTML
πŸ‘¨β€πŸ’»πŸŽ¨ Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Π°
Π‘ΠΎΠ»ΡŒΡˆΠ΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠ² Π²Ρ‹ Π½Π°ΠΉΠ΄Π΅Ρ‚Π΅ Π½Π° нашСм Ρ‚Π΅Π»Π΅Π³Ρ€Π°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Π°Β»

innerHTML + template

ИспользованиС Ρ‚Π΅Π³Π° <template> снимаСт ограничСния Π½Π° содСрТимоС – ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ HTML структуру, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ элСмСнты, связанныС с Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌΠΈ – <tr> ΠΈ <td>.

innerHTML + template

insertAdjacentHTML

Как ΠΈ innerHTML, этот ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ допустимыС HTML-ΡƒΠ·Π»Ρ‹ ΠΈ Π½Π΅ выполняСт скрипты.

insertAdjacentHTML

DOMParser

Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅Ρ‚ строку, создавая ΠΏΠΎΠ»Π½Ρ‹ΠΉ HTML-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΈ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡ‚ΠΎΠΌ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ‚ ΡƒΠ·Π΅Π» ΠΈΠ· Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°. Он Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ допустимыС ΡƒΠ·Π»Ρ‹ HTML ΠΈ Π½Π΅ выполняСт скрипты.

DOMParser

Range.createContextualFragment

Π‘Π°ΠΌΡ‹ΠΉ простой, Π½ΠΎ Π½Π΅ бСзопасный ΠΌΠ΅Ρ‚ΠΎΠ΄ – выполняСт скрипты. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‡ΠΈΡ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ для Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ XSS – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DOMPurify.

Range.createContextualFragment
***

Π‘Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π»ΠΈΡΡŒ Π»ΠΈ Π²Ρ‹ с ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ ΠΏΡ€ΠΈ создании DOM элСмСнтов ΠΈΠ· HTML строк? Как Π²Ρ‹ ΠΈΡ… Ρ€Π΅ΡˆΠ°Π»ΠΈ?

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•