DOM ์ •๋ฆฌ

Na Jeongยท2022๋…„ 11์›” 3์ผ
0
post-thumbnail

๐Ÿ“DOM (Document Object Model)

D : ์›น ํŽ˜์ด์ง€ ๋ฌธ์„œ(HTML)
O : ๊ฐ์ฒด
M : ๋ชจ๋ธ

DOM์€ HTML์„ ๊ณ„์ธตํ™”์‹œ์ผœ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋งŒ๋“  ๊ฐ์ฒด๋ชจ๋ธ์ด๋‹ค.
DOM์€ ์›น ํŽ˜์ด์ง€ ๋ฌธ์„œ, ์ฆ‰ HTML๊ณผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์„œ๋กœ ์ž‡๋Š” ์—ญํ• ์ž„
ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜์—ฌ ๊ทธ๋“ค์ด ๋ฌธ์„œ ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ๋‚ด์šฉ ๋“ฑ์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค€๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ document๋ผ๋Š” ๋ณ€์ˆ˜๋กœ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅ!

๐Ÿ„ DOM ์ ‘๊ทผํ•˜๊ธฐ

๐Ÿ‘‰ getElementsByTagName

tag ์ด๋ฆ„์„ ์ด์šฉํ•œ ์š”์†Œ ์ทจ๋“ ๊ฐ€๋Šฅ!

const pTags = document.getElementsByTaName('p');

ํ•ด๋‹น ํŽ˜์ด์ง€์— ์žˆ๋Š” ๋ชจ๋“  p ํƒœ๊ทธ๊ฐ€ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋‹ด๊ฒจ์„œ ๋ฐ˜ํ™˜๋œ๋‹ค.

๐Ÿ‘‰ querySelector

CSS ์„ ํƒ์ž๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ๋…ธ๋“œ ์ทจ๋“

const el = document.querySelector('category_item');

category_item ์ด๋ผ๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜
getElementByTagName ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ๋ฐฐ์—ด์ด ์•„๋‹Œ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๐Ÿ‘‰ getElementById

id๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ์ทจ๋“

const element = document.getElementById('NM_NEWSSTAND_HEADER');

id๊ฐ€ NM_NEWSSTAND_HEADER์ธ ์š”์†Œ๊ฐ€ ๋ฐ˜ํ™˜๋œ๋‹ค.

๐Ÿ‘‰getElementsByClassName

class๋ฅผ ์ด์šฉํ•œ ์š”์†Œ ์ทจ๋“

const element = document.getElementsByClassName('category_item');

ํ•ด๋‹นํŽ˜์ด์ง€์— ์žˆ๋Š” class ์ด๋ฆ„์ด category_item์ธ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ๋ฐฐ์—ด์˜ ํ˜•ํƒœ๋กœ ๋‹ด๊ฒจ์„œ ๋ฐ˜ํ™˜๋œ๋‹ค.

๐Ÿ„ DOM ์กฐ์ž‘ํ•˜๊ธฐ

๐Ÿ‘‰ innerHTML - ๋‚ด์šฉ(content)์กฐ์ž‘

//HTML body ํƒœ๊ทธ์— ์ ‘๊ทผํ•˜์—ฌ ๋‚ด์šฉ ์กฐ์ž‘
document.body.innerHTML = '๋‚ด์šฉ ๋ฐ”๊พธ๊ธฐ';

innerHTML์„ ํ†ตํ•ด ์š”์†Œ์˜ ๋‚ด์šฉ, ์ฆ‰ ์‹œ์ž‘ ํƒœ๊ทธ์™€ ์ข…๋ฃŒ ํƒœ๊ทธ ์‚ฌ์ด์˜ ๋‚ด์šฉ์— ์ ‘๊ทผํ•˜์—ฌ ์ˆ˜์ • ๊ฐ€๋Šฅ.
body ํƒœ๊ทธ์— ์ ‘๊ทผํ•˜์—ฌ ๋‚ด๋ถ€ ๋‚ด์šฉ์„ '๋‚ด์šฉ ๋ฐ”๊พธ๊ธฐ' ๋ผ๋Š” ๋ฌธ์ž์—ด๋กœ ์กฐ์ž‘.
body ํƒœ๊ทธ ์ž์‹ ์š”์†Œ๊ฐ€ ๋งŽ๋”๋ผ๋„ innerHTML์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ์˜ ๋‚ด์šฉ์ด ์ „๋ถ€ ๊ต์ฒด๋œ๋‹ค.

๐Ÿ‘‰ style - ์Šคํƒ€์ผ ์กฐ์ž‘

//id๊ฐ€ 'NM_NEWSSTAND_HEADER'์ธ ์š”์†Œ ์ทจ๋“ >> ๋ณ€์ˆ˜์— ์ €์žฅ
const element = document.getElementByTd('NM_NEWSSTAND_HEADER');

//ํ•ด๋‹น ์š”์†Œ์˜ ์Šคํƒ€์ผ ์กฐ์ž‘
element.style.backgroundColor = 'blue';

HTML ์š”์†Œ์˜ style์— ์ ‘๊ทผํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
HTML ํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜์—ฌ id๊ฐ€ NMNEWSSTAND_HEADER์ธ ์š”์†Œ๋ฅผ ์ทจ๋“ํ•˜์—ฌ element ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์˜€๋‹ค.
ํ•ด๋‹น ์š”์†Œ์˜ style์— ์ ‘๊ทผํ•˜์—ฌ ๋ฐฐ๊ฒฝ์ƒ‰์„ blue๋กœ ๋ฐ”๊พธ์—ˆ๋‹ค.
DOM์— ์ ‘๊ทผํ•˜์—ฌ ์Šคํƒ€์ผ์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒฝ์šฐ๋Š” _camelCase
๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๐Ÿ‘‰ createElement - ์š”์†Œ ์ƒ์„ฑ

//h1 ์š”์†Œ ์ƒ์„ฑ ๋ฐ ๋‚ด์šฉ ์ถ”๊ฐ€
const item = document.createElement('h1') //<h1></h1>
item.innerHTML = '์ œ๋ชฉ์ถ”๊ฐ€'; //<h1>์ œ๋ชฉ์ถ”๊ฐ€</h1>

//h1 ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์œ„์น˜ ์ทจ๋“
const newsHeader = codument.getElementById('NM_NEWSSTAND_HEADER');

//newsHeader ์ž์‹์œผ๋กœ item ์ถ”๊ฐ€
newsHeader.appendChild(item);

.createElement(tagName) ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด HTML ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
์ƒ์„ฑํ•œ h1 ์š”์†Œ์— innerHTML์„ ํ†ตํ•ด ๋‚ด์šฉ์„ ์„ค์ •ํ•ด์ฃผ์—ˆ๋‹ค.
์š”์†Œ๋Š” ์ƒ์„ฑ๋งŒ ๋์„ ๋ฟ, HTML์— ์ถ”๊ฐ€๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜๋Š” ์—†๋‹ค.
ํŠน์ • ์š”์†Œ์˜ ์ž์‹ ์š”์†Œ๋กœ append ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•์€ appendChild ์ด๋‹ค!
id๊ฐ€ NM_NEWSSTAND_HEADER์ธ ์š”์†Œ๋ฅผ ์ฐพ์•„์„œ(newsHeader), ์ž์‹์œผ๋กœ item์„ ์ถ”๊ฐ€ํ•œ๋‹ค.

๐Ÿ‘‰ ์š”์†Œ์˜ ์†์„ฑ(attribute) ์กฐ์ž‘

//์š”์†Œ์— id ์ˆ˜์ •(์ถ”๊ฐ€)
element.id = 'newId';

//์š”์†Œ์— class ์ˆ˜์ •(์ถ”๊ฐ€)
element.className = 'newClass';

//์š”์†Œ ์Šคํƒ€์ผ ์ˆ˜์ •(์ถ”๊ฐ€)
element.style.backgroundColor = 'red';

document ๊ฐ์ฒด๋กœ ํŠน์ • ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋“ฏ์ด, ์š”์†Œ์˜ ์†์„ฑ์—๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
ํŠน์ • ์š”์†Œ์˜ ์†์„ฑ์— ์ ‘๊ทผํ•˜์—ฌ id, ํ˜น์€ class๋„ ์ถ”๊ฐ€ํ•˜๊ณ  style ๊ฐ’๋„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

profile
๋Š์ž„์—†์ด ๋…ธ๋ ฅํ•˜๋Š” ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž (โธโธโขโธโธ) เท†

0๊ฐœ์˜ ๋Œ“๊ธ€