๋ฐ˜์‘ํ˜•

insertAdjacentHTML vs innerHTML


element.insertAdjacentHTML(position, htmlString)

 

element.insertAdjacentHTML() ๋ฉ”์„œ๋“œ๋Š” ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ๋ฌธ์ž์—ด(htmlString)์„ HTML๋กœ ํŒŒ์‹ฑํ•ด์„œ ์ง€์ •๋œ ์œ„์น˜(position)์— ์‚ฝ์ž…ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ณณ์— ์‚ฌ์šฉํ•˜๋ฉด createElement() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๊ฐ„ํŽธํ•˜๊ฒŒ ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž ์ž…๋ ฅ์„ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•  ๋•Œ๋Š” XSS ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ sanitizing์ด ํ•„์š”ํ•˜๋‹ค.

 

๋น„์Šทํ•œ ๋ฉ”์„œ๋“œ๋กœ element.innerHTML()์ด ์žˆ์ง€๋งŒ ์‚ฝ์ž… ์œ„์น˜๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์—†๊ณ , ๊ธฐ์กด ์š”์†Œ๋ฅผ ๋ฎ์–ด์“ฐ๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์š”์†Œ๋ฅผ ๋‹ค์‹œ ํŒŒ์‹ฑํ•ด์•ผ ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ด๋Š” ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ์‹œ HTML ๊ตฌ์กฐ - CodePen ๋งํฌ โ–ผ

<main>
  <ul>
    <li>Todo 1</li>
    <li>Todo 2</li>
    <li>Todo 3</li>
    <!-- ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์œ„์น˜ -->
  </ul>
</main>

 

innerHTML์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ โ–ผ

const $ul = document.querySelector("ul");
// ์ „์ฒด <ul> ํƒœ๊ทธ ๋‹ค์‹œ ํŒŒ์‹ฑ ๐Ÿ™
$ul.innerHTML += '<li>Todo 4</li>';

 

insertAdjacentHTML์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ โ–ผ

const $ul = document.querySelector("ul");
// 2๋ฒˆ์งธ ์ธ์ž๋กœ ๋„˜๊ธด htmlString ๋ฌธ์ž์—ด๋งŒ ํŒŒ์‹ฑ ๐Ÿ˜ƒ
$ul.insertAdjacentHTML("beforeend", '<li>Todo 4</li>');

 

๐Ÿ’ก ์›ํ•˜๋Š” ์œ„์น˜์— ์—˜๋ฆฌ๋จผํŠธ ๋…ธ๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” insertAdjacentElement() ๋ฉ”์„œ๋“œ๋„ ์žˆ๋‹ค. htmlString ๋Œ€์‹  DOM ์š”์†Œ๋ฅผ ์ง์ ‘ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ๋งŒ ๋‹ค๋ฅด๊ณ  ๋‚˜๋จธ์ง€ ์‚ฌ์šฉ๋ฒ•์€ ๋™์ผํ•˜๋‹ค.

 

 

ํŒŒ๋ผ๋ฏธํ„ฐ


์œ„์น˜ position

insertAdjacentHTML ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” position ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ๋Œ€์ƒ ์š”์†Œ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์œ„ ์˜ˆ์‹œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋Œ€์ƒ ์š”์†Œ๋Š” <ul> ํƒœ๊ทธ๊ฐ€ ๋œ๋‹ค.

 

position ์‚ฝ์ž… ์œ„์น˜
"beforebegin" ๋Œ€์ƒ ์š”์†Œ ๋ฐ”๋กœ ์ด์ „์— ์‚ฝ์ž… (๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅ)
"afterend" ๋Œ€์ƒ ์š”์†Œ ๋ฐ”๋กœ ๋’ค์— ์‚ฝ์ž… (๋ถ€๋ชจ ์š”์†Œ๊ฐ€ ์žˆ์„ ๋•Œ๋งŒ ๊ฐ€๋Šฅ)
"afterbegin" ๋Œ€์ƒ ์š”์†Œ์˜ ์ฒซ ๋ฒˆ์งธ ์ž์‹์œผ๋กœ ์‚ฝ์ž…
"beforeend" ๋Œ€์ƒ ์š”์†Œ์˜ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์‚ฝ์ž…

 

<main>
  <!-- beforebegin ์‚ฝ์ž… ์œ„์น˜ -->
  <ul>
    <!-- afterbegin ์‚ฝ์ž… ์œ„์น˜ -->
    <li>Todo 1</li>
    <li>Todo 2</li>
    <li>Todo 3</li>
    <!-- beforeend ์‚ฝ์ž… ์œ„์น˜ -->
  </ul>
  <!-- afterend ์‚ฝ์ž… ์œ„์น˜ -->
</main>

 

๋ฌธ์ž์—ด htmlString

insertAdjacentHTML ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฌธ์ž์—ด์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํŒŒ์‹ฑ ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ํšจํ•œ HTML ๋งˆํฌ์—… ํ˜•ํƒœ์—ฌ์•ผ ํ•œ๋‹ค. ์—ด๊ณ  ๋‹ซ๋Š” ํƒœ๊ทธ๋ฅผ ๋นผ๋จน์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•˜์ž.

"<li>hello</li>"  โœ…
"<li>hello<li>"   โŒ
"<li>hello"       โŒ

 

 

๋ ˆํผ๋Ÿฐ์Šค


 

Element: insertAdjacentHTML() ๋ฉ”์„œ๋“œ - Web API | MDN

Element ์ธํ„ฐํŽ˜์ด์Šค์˜ insertAdjacentHTML() ๋ฉ”์„œ๋“œ๋Š” ์ง€์ •๋œ ํ…์ŠคํŠธ๋ฅผ HTML ํ˜น์€ XML๋กœ ํŒŒ์‹ฑํ•˜๊ณ  ๊ฒฐ๊ณผ ๋…ธ๋“œ๋“ค์„ ์ง€์ •๋œ ์œ„์น˜์˜ DOM ํŠธ๋ฆฌ์— ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค.

developer.mozilla.org

 


๊ธ€ ์ˆ˜์ •์‚ฌํ•ญ์€ ๋…ธ์…˜ ํŽ˜์ด์ง€์— ๊ฐ€์žฅ ๋น ๋ฅด๊ฒŒ ๋ฐ˜์˜๋ฉ๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”
๋ฐ˜์‘ํ˜•