์ƒ์„ธ ์ปจํ…์ธ 

๋ณธ๋ฌธ ์ œ๋ชฉ

DOM appendChild๋กœ ๋ฆฌ์ŠคํŠธ์— ์š”์†Œ ์ถ”๊ฐ€ํ•˜๊ธฐ

IT/Javascript

by J KIMS 2021. 1. 21. 11:37

๋ณธ๋ฌธ

๋ฐ˜์‘ํ˜•

๐Ÿ“ฃHTML์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๊ณ  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•

 

 

์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค

 

1. createElement() - ์ƒˆ๋กœ์šด ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค

2. createTextNode() - ์ƒˆ๋กœ์šด ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค

3. appendChild() - ๋…ธ๋“œ1์— ๋…ธ๋“œ2๋ฅผ appendํ•œ๋‹ค 

 

์ž ๊น ์˜๋ฌธ์ ) ์ด๋ ‡๊ฒŒ ํ…์ŠคํŠธ ๋…ธ๋“œ๋ฅผ appendํ•˜๋Š” ๊ฒƒ๊ณผ innerHTML์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์ฐจ์ด๊ฐ€ ๋ญ์ง€?

 

์–ด์จŒ๋“ ,

์œ„ 1~3์„ ํ†ตํ•ด์„œ ์‚ฝ์ž…ํ•  ์ƒˆ ๋…ธ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๊ณ , ์ด์ œ ๋ฌธ์„œ์—์„œ ์›ํ•˜๋Š” ์œ„์น˜๋ฅผ ์ฐพ์•„์„œ ๋‹ค์‹œ appendํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

 

ํ•˜๋‚˜์˜ ๋…ธ๋“œ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋ฉ”์†Œ๋“œ์—๋Š” getElementId('id')์™€ querySelector('css selector')๊ฐ€ ์žˆ๋Š”๋ฐ ํ›„์ž๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌ์ŠคํŠธ ๋…ธ๋“œ์— ์ ‘๊ทผํ–ˆ๋‹ค.

 

์˜ˆ์ œ) ๋„์‹œ ๋ฆฌ์ŠคํŠธ์— ๋‹ค์„ฏ๋ฒˆ์งธ ์š”์†Œ์ธ NewYork์„ JS๋กœ ์ถ”๊ฐ€ํ•จ

 

 

 

๋ฒˆ์™ธ

๐Ÿ’ก innerHTML๊ณผ createElement์˜ ์ฐจ์ด์ 

 

1. createElement๊ฐ€ ๋” ํšจ์œจ์ ์ด๋‹ค

let div = document.querySelector('.container');
div.innerHTML += '<p>JS DOM</p>';

 

์ฝ”๋“œ๋Š” ๊น”๋”ํ•˜๊ฒŒ ๋ณด์ด์ง€๋งŒ...innerHTML์€ ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ชจ๋“  DOM node๋“ค์„ reparseํ•˜๊ณ  recreateํ•˜๊ฒŒ ๋งŒ๋“ค๊ธฐ ๋•Œ๋ฌธ์— ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ๋งŒ๋“ค๊ณ  appendํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋น„ํšจ์œจ์ ์ž„. 

 

2. createElement๊ฐ€ ๋” ์•ˆ์ „ํ•˜๋‹ค

innerHTML์€ ๋‚ด๊ฐ€ ํ†ต์ œ๊ถŒ์„ ์ฅ๊ณ  ์žˆ์ง€ ์•Š์„ ๋•Œ ์•…์„ฑ ์ฝ”๋“œ๊ฐ€ ์„ž์ผ ์œ„ํ—˜์ด ์žˆ์Œ

 

3. DocumentFragment๋ฅผ ์‚ฌ์šฉํ•ด์„œ DOM์— ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋” ํšจ์œจ์ ์ด๋‹ค

 

let div = document.querySelector('.container');

for (let i = 0; i < 1000; i++) {
   let p = document.createElement('p');
   p.textContent = `Paragraph ${i}`;
   div.appendChild(p);
}

 

์ด๊ฑด ๊ทธ๋ƒฅ creatElement/appendChild๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•œ ๊ฒƒ.

๋งˆ์ง€๋ง‰์ค„์„ ๋ณด๋ฉด ๋งค๋ฒˆ div์— appendํ•˜๊ณ  ์žˆ๋Š”๋ฐ ์ด๊ฒŒ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•จ.

 

let div = document.querySelector('.container');

// compose DOM nodes
let fragment = document.createDocumentFragment();
for (let i = 0; i < 1000; i++) {
   let p = document.createElement('p');
   p.textContent = `Paragraph ${i}`;
   fragment.appendChild(p);
}

// append the fragment to the DOM tree
div.appendChild(fragment);

 

fragment์— ์ƒˆ๋กœ ๋งŒ๋“  ์š”์†Œ๋“ค์„ ๋ถ™์—ฌ๋„ฃ๊ณ  ๋งˆ์ง€๋ง‰์— ํ•œ๋ฒˆ์— div์— appendํ•˜๋Š” ๋ฐฉ์‹

document fragment๋Š” active DOM tree์— ๋งํฌํ•˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ ํผํฌ๋จผ์Šค์— ์˜ํ–ฅ์„ ์•ˆ ์ค€๋‹ค๊ณ  ํ•จ.

 

์ถœ์ฒ˜ )

 

JavaScript innerHTML vs createElement

Summary: in this tutorial, you’ll learn the difference between the innerHTML and createElement() when it comes to creating new elements in the DOM tree. #1) createElement is more performant Suppose that you have a div element with the class container: Yo

www.javascripttutorial.net

 

fragment๊ฐ€ ๋ญ”์ง€๋Š” ๋‚˜๋„ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Œ. ์•„์ง DOM์— ๋Œ€ํ•œ ๊ณต๋ถ€๊ฐ€ ๋ถ€์กฑํ•ด์„œ ์˜ค๋Š˜์€ ์—ฌ๊ธฐ๊นŒ์ง€๋งŒ ์•Œ์•„๋ณด๋ ค๊ณ  ํ•จ. ํ˜น์‹œ ์ž˜ ์•„์‹œ๋Š” ๋ถ„๋“ค์€ ๋ง๊ธ€๋กœ ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

๐Ÿ“š Reference

- Javascript and JQuery : Interactive Front-End Web Development by Jon Duckett

๋ฐ˜์‘ํ˜•

๊ด€๋ จ๊ธ€ ๋”๋ณด๊ธฐ

๋Œ“๊ธ€ ์˜์—ญ