๋ค ๊น๋จน์ด๋ฒ๋ฆฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ๋ณต๊ธฐ์ํค๊ธฐ ์ํด ์์ํ ํฌ๋ ๋ฆฌ์คํธ ๋ง๋ค๊ธฐ!
๋ง๋ค๋ค ๋ณด๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฒ์ ๋ฐฐ์ธ ๋ ์จ๋ด๋ ค๊ฐ๋ ์ฝ๋์ ๋ณ๋ฐ ์ฐจ์ด๊ฐ ์๋ค..
์ฒ์์ด๋ ๋๊ฐ์ด ์์ฑํ๋ฉด ๋จ์ ๋ณต์ต ๋จ์ ๋ ธ๊ฐ๋ค์ผ๋ฟ..!!!!
๋ญ๋ผ๋ ๋ฐ์ ๋๊ฒ ์์ด์ผ ํ์ง ์์๊น.......???????????๋ ์๊ฐ์
๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ค์ฌ๋ณด๊ธฐ๋ก ํ๋ค!
๐ป ์ด์ ์ฝ๋
์ ์๋ ๋ ๋ค ํ์ํ ์์๋ค ๋์์์ด ์์ฑ ํ
๋ ๋ค ๋ถ์ฌ๋ฒ๋ฆฌ๊ธฐ..
๋ถ๋ชจ์์ ์์ฑ, ์์์์ ์์ฑ, ์์์์ ๋ถ๋ชจ์์์ ๋ถ์ด๊ธฐ..
์๊พธ ๋์ด๋ง ๊ฐ๋ createElement, appendChild......์ง๊ธ์ง๊ธํ..
โจ ๋ฆฌํฉํ ๋ง
function createElement({
tagName,
properties,
parent,
children,
count = 1,
}) {
function create() {
const element = document.createElement(tagName); // ํ๊ทธ ์์ฑ
Object.assign(element, properties); // ์์ฑ ํ ๋น
parent?.appendChild(element); // ๋ถ๋ชจ์ ์ถ๊ฐ
// ์์ ์์๊ฐ ์์ ๊ฒฝ์ฐ ์ฌ๊ท์ ์ผ๋ก ์์ ์์ฑ
children?.map((child) => {
child.parent = element; // ํ์ฌ ์์ฑ๋ ์์๋ฅผ ๋ถ๋ชจ๋ก ์ค์
createElement(child); // ์์ ์์๋ฅผ ์ํ createElement ์ฌ๊ท ํธ์ถ
});
return element;
}
if (count > 1) {
const results = [];
for (let i = 0; i < count; i++) {
results.push(create());
}
return results;
} else {
return create();
}
}
- createElement์ appendChild๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ createElement ํจ์๋ก ๋ณ๊ฒฝํ์ฌ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ์๋ค.
- createElement ํจ์๋ ์ฌ๋ฌ ์์๋ฅผ ํ ๋ฒ์ ์์ฑํ ์ ์๋๋ก count ํ๋ผ๋ฏธํฐ๋ฅผ ์ถ๊ฐํ์๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ์์๋ฅผ ๋์ ์ผ๋ก ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๊ฒ ๋์๋ค.
- ๋ถ๋ชจ-์์ ๊ด๊ณ์ DOM ๊ตฌ์กฐ๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด children ํ๋ผ๋ฏธํฐ์ ์ฌ๊ท ํธ์ถ์ ์ฌ์ฉํ๋ค. ์ด๋ก์จ ๋ถ๋ชจ ์์๊ฐ ์์ ์์๋ฅผ ๊ฐ๋ ๋ณต์กํ DOM ํธ๋ฆฌ๋ ๊ฐ๋จํ๊ฒ ๊ตฌ์ฑํ ์ ์๋ค.
- Object.assign์ ์ฌ์ฉํ์ฌ ์์์ ์์ฑ๋ค์ ์ ์ฐํ๊ฒ ํ ๋นํ ์ ์๋๋ก ํ์๋ค. ์ด๋ฅผ ํตํด ์ฌ๋ฌ ์์ฑ์ ํ ๋ฒ์ ์ค์ ํ ์ ์๊ณ , ์ถ๊ฐ์ ์ธ ์์ฑ์ด ์๊ธฐ๋๋ผ๋ ํจ์ ์์ ์์ด ์ฒ๋ฆฌํ ์ ์๋ค.
Object.assign()์ ๊ฐ์ฒด์ ์์ฑ๋ค์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ณต์ฌํ๋ ์ญํ ์ ํ๋ค.
์ฌ๊ธฐ์๋ properties ๊ฐ์ฒด์ ์์ฑ๋ค์ ์์ฑ๋ ํ๊ทธ(element)์ ๋ณต์ฌํ์ฌ, ํ๊ทธ์ ์์ฑ์ ์ค์ ํ๋ค.
โจ ๋ฆฌํฉํ ๋งํ createElement ์ฌ์ฉํ๊ธฐ
children ์์๊ฐ ๋์ ์์ด ์๊ฒจ ๋ฌดํ ๋ค์ฌ์ฐ๊ธฐ๊ฐ ๋ฐ์..
๊ฐ๋ ์ฑ์ ์ํด header, inputContainer, itemContainer์ ํฐ ๋ฉ์ด๋ฆฌ๋ก ๋๋์ด์ ์์ฑํด์ฃผ์๋ค.
const app = createElement({
tagName: "div",
properties: { id: "app" },
parent: document.body,
});
const header = createElement({
tagName: "header",
properties: { id: "header" },
parent: app,
children: [
{
tagName: "div",
properties: { className: "counter" },
children: [
{
tagName: "span",
properties: { textContent: "total" },
},
{
tagName: "span",
properties: { textContent: "0" },
},
{
tagName: "span",
properties: { textContent: "completed" },
},
{
tagName: "span",
properties: { textContent: "0" },
},
],
},
{
tagName: "h1",
properties: { textContent: "T๐ D๐ฏ LIST", className: "title" },
},
{
tagName: "span",
properties: { textContent: "ํ ์ผ์ ๊ธฐ๋กํ์ธ์๐ฑ" },
},
],
});
// ์ดํ ์๋ต..
์ฐธ๊ณ ๐ง
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
'๐ฉโ๐ป hello, world! > JavaScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] DOM ๋ค๋ฃจ๊ธฐ :: textContent, innerText, innerHTML, appendChild, insertAdjacentHTML (2) | 2024.09.12 |
---|---|
map / forEach ์ฐจ์ด (0) | 2024.09.11 |