- setter, getter๋ชจ๋ ์กด์ฌํ๋ ์ ๊ทผ์ ํ๋กํผํฐ๋ก์ ์์ ๋ ธ๋์ HTML๋งํฌ์ ์ ์ทจ๋ํ๊ฑฐ๋ ๋ณ๊ฒฝํจ.
- ์์ ๋ ธ๋์ ์ฝํ ์ธ ์์ญ ๋ด์ ํฌํจ๋ ๋ชจ๋ HTML๋งํฌ์ ์ ๋ฌธ์์ด๋ก ๋ฐํํจ!!!
- ํ ๋น ์ ์์ ๋ ธ๋์ ๋ชจ๋ ์์ ๋ ธ๋๊ฐ ์ ๊ฑฐ๋๊ณ HTML๋งํฌ์ ์ด ํ์ฑ๋์ด ์์ ๋ ธ๋์ ์์ ๋ ธ๋๋ก DOM์ ๋ฐ์!!!
๐พ #1
<ul id="fruits">
<li class="apple">Apple</li>
</ul>
const $fruits = document.getElmentById('fruits');
$fruits.innerHTML += '<li class="banana">Banana</li>';
๐๐ป ์์ ์์๋ฅผ ๋ชจ๋ ์ ๊ฑฐ ํ apple, banana๋ฅผ ์ถ๊ฐํจ!
๐๐ป ์์ ๋
ธ๋๊น์ง ๋ชจ๋ ์ ๊ฑฐํ๊ณ ์๋กญ๊ฒ ์์ ๋
ธ๋๋ฅผ ์์ฑํ์ฌ DOM์ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํจ์จ์ ์ด์ง ์์!!!
๐๐ป ์ฝ์
ํ ์์น๋ฅผ ์ง์ ํ์ง ๋ชปํจ~!
- ๊ธฐ์กด ์์๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์์น๋ฅผ ์ง์ ํด ์๋ก์ด ์์๋ฅผ ์ฝ์ ํจ.
- ๋ฉ์๋๋ ์ฒซ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ ธ๋๋ฅผ ๋ ๋ฒ์งธ ์ธ์๋ก ์ ๋ฌ๋ฐ์ ๋ ธ๋ ์์ ์ฝ์ ํจ!
- ๋ ธ๋์ ์ฌ๋ณธ์ ์์ฑํ์ฌ ๋ฐํ
- true: ๊น์๋ณต์ฌ, false: ์์๋ณต์ฌ
- ์๋ต์ ์์ ๋ณต์ฌ์ด๋ฉฐ, ์์ ๋ณต์ฌ๋ ํ ์คํธ๋ ธ๋๋ฅผ ๋ณต์ฌํ์ง ์์
- ์์ ์ ํธ์ถํ ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ๋ค๋ฅธ ๋ ธ๋๋ก ๊ต์ฒด
- oldChild ๋งค๊ฐ๋ณ์์ ์ธ์๋ก ์ ๋ฌํ ๋ ธ๋๋ replaceChild๋ฉ์๋๋ฅผ ํธ์ถํ ๋ ธ๋์ ์์ ๋ ธ๋์ฌ์ผ ํจ.
- oldChild๋ DOM์์ ์ญ์ ๋จ.
- ์์๋ ธ๋๊ฐ DOM์์ ์ญ์ ๋จ.
- HTML๋ฌธ์๊ฐ ํ์ฑ๋ ๋ ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋๋ก ๋ณํ๋์ด ์์ ๋ ธ๋์ ์ฐ๊ฒฐ๋จ.
- HTML ์ดํธ๋ฆฌ๋ทฐํธ ๋น ํ๋์ ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋๊ฐ ์์ฑ๋จ.
- ์ดํธ๋ฆฌ๋ทฐํธ์ ์ฐธ์กฐ๋ ์ ์ฌ๋ฐฐ์ด ๊ฐ์ฒด์ด์ ์ดํฐ๋ฌ๋ธ์ธ NameNodeMap ๊ฐ์ฒด์ ๋ด๊ฒจ์ ์์๋ ธ๋์ attributes ํ๋กํผํฐ์ ์ ์ฅ๋จ.
- ์์์ ๋ชจ๋ ์ดํธ๋ฆฌ๋ทฐํธ ๋ ธ๋๋ ์์ ๋ ธ๋์ Element.prototype.attributes ํ๋กํผํฐ๋ก ์ทจ๋ํ ์ ์์.
- attributes ํ๋กํผํฐ๋ getter๋ง ์กด์ฌํ๋ ์ฝ๊ธฐ์ ์ฉ ์ ๊ทผ์ ํ๋กํผํฐ์.
๐พ
<input id="user" type="text" value="zooyaho">
const {attributes} = document.getElementById('user');
console.log(attributes.id.value); // user
- attributes ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ์ง ์๊ณ ์ทจ๋,๋ณ๊ฒฝ ๊ฐ๋ฅํจ.
- getAttribute(attributeName), setAttribute(attributeName, attributeValue)
- html ์์์ ์ ์ํ ์ฌ์ฉ์ ์ ์ ์ดํธ๋ฆฌ๋ทฐํธ์ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ์ ์์.
- data์ดํธ๋ฆฌ๋ทฐํธ๋ data- ์ ๋์ฌ ๋ค์์ ์์์ ์ด๋ฆ์ ๋ถ์ฌ ์ฌ์ฉ.
- data ์ดํธ๋ฆฌ๋ทฐํธ ๊ฐ์ HTMLElement.dataset ํ๋กํผํฐ๋ฅผ ์ทจ๋ํ ์ ์์ผ๋ฉฐ, DOMStringMap๊ฐ์ฒด๋ฅผ ๋ฐํ.
- DOMStringMap๊ฐ์ฒด๋ data- ์ ๋์ฌ ๋ค์์ ๋ถ์ธ ์ด๋ฆ์ ์นด๋ฉ์ผ์ด์ค๋ก ๋ณํํ ํ๋กํผํฐ๋ฅผ ๊ฐ์ง๊ณ ์์.
๐พ #
<ul class="users">
<li id="1" data-user-id="1234" data-role="admin">Lee</li>
<li id="2" data-user-id="0000" data-role="user">Park</li>
</ul>
const users = [...document.querySelector('.users').children];
const user = users.find(user => user.dataset.userId === '1234');
console.log(user.dataset.role); // 'admin'
- setter/getter ๋ชจ๋ ์กด์ฌํ๋ ์ ๊ทผ์ ํ๋กํผํฐ, ์ธ๋ผ์ธ ์คํ์ผ์ ์ทจ๋ํ๊ฑฐ๋ ์ถ๊ฐ ๋๋ ๋ณ๊ฒฝํจ.
- ํด๋์ค๋ฅผ ์ ์ฉํ ์คํ์ผ์ด๋ ์์์ ํตํด ์๋ฌต์ ์ผ๋ก ์ ์ฉ๋ ์คํ์ผ์ style ํ๋กํผํฐ๋ฅผ ์ฐธ์กฐํ ์ ์์.
- HTML์์์ ์ ์ฉ๋์ด ์๋ ๋ชจ๋ CSS ์คํ์ผ์ ์ฐธ์กฐํ ์ ์์.
- CSSStyleDecleration ๊ฐ์ฒด์ ๋ด์ ๋ฐํ!
๐พ #1
<div class="box">Box</div>
const $box = document.quetySelector('.box');
console.log(window.getComputedStyle($box));
// CSSStyleDecleration
console.log(window.getComputedStyle($box).width); // 100px