ํฐ์คํ ๋ฆฌ ๋ทฐ
JS ์์์ HTML ํ๊ทธ ๋์ ์์ฑ
์ด์ ํฌ์คํ ์์ Tabs-Content๋ HTML ์์์์ ์ ์ ์ธ ํ๊ทธ๊ฐ ์๋, ์๋ฒ๋ก๋ถํฐ ๋ฐ์ Tab-Data๋ค์ ๊ฐฏ์์ ๋ด์ฉ์ ๋ฐ๋ผ ๋์ ์ผ๋ก ์์ฑ๋์ด์ผ ํ๋ค.
์ด๋ฅผ ์ํด ๋ค์๊ณผ ๊ฐ์ด ์๊ตฌ๋๋ ํ๊ทธ๋ค์ setAttribute()์ createElement()๋ฅผ ํตํด ๋์ ์ผ๋ก ์์ฑํด ์ฃผ๋ ํจ์๋ฅผ ๋ง๋ค์๋ค.
function createNavElement(tag, tabNum, tabTitle) {
if(tag === 'div') {
for(let i = 0; i < tabNum; i++) {
let tab = document.createElement('div');
tab.setAttribute('class', "tab");
tab.setAttribute('data-index', `${i}`);
tab.textContent = `${tabTitle[i].title}`;
divNavElem.push(tab);
}
} else {
glider = document.createElement('span');
glider.setAttribute('class', 'glider');
}
}
ํ๊ทธ๋ฅผ ๋ง๋ค๋ ํ์ํ ์ ๋ณด๋ค์ ๋งค๊ฐ ๋ณ์๋ก ๋๊ฒจ ์ฃผ์ด ํ๊ทธ ์ข ๋ฅ์ ๋ฐ๋ผ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฐ์ฐ์ ํ๋๋ก ์ฝ๋๋ฅผ ๊ตฌ์ฑํ์๋๋ฐ,
ํ๊ทธ๋ฅผ ๋ง๋ค๋ ๋ง๋ค ํจ์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ์์ฑํ๋ ๊ฒ์ ๋ค์ ๋นํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
์ด๋ฅผ ๋์ ์ innerHTML๋ฅผ ์ฌ์ฉํ์๋ค.
Element ์์ฑ(property) innerHTML์ ์์(element) ๋ด์ ํฌํจ ๋ HTML ๋๋ XML ๋งํฌ์ ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ์ค์ ํฉ๋๋ค.
const nav = tabsData.map(
({ title }, i) => `
${i === 0 ? "<nav>" : ""}
<div class="tab" data-index="${i}">${title}</div>
${i === tabsData.length - 1 ? '<span class="glider"></span></nav>' : ""}`
);
//tabsData๋ Tab-Data์ ๋ํ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฐฐ์ด์ด๋ค.
๋ค์๊ณผ ๊ฐ์ด map ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ innerHtml์ ๋ค์ด๊ฐ ๋งํฌ์ ์ ๋ฆฌํฐ๋ด์ ํํ์ ์ฝ์ ์ ํตํด ๋์ ์ผ๋ก ์์ฑํด์ค ๋ค, nav ๋ผ๋ ๋ณ์์ ์๋กญ๊ฒ ๋ฐฐ์ด๋ก ํ ๋นํด ์ค๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๋ค๋ฅธ ํ๊ทธ๋ค ๋ํ ์์ ๊ฐ์ ์ฐ์ฐ์ ํตํด ๋งํฌ์ ์ ์์ฑํด ์ค๋ค.
$tabs.innerHTML = [...nav, ...contents].join("");
์์ฑํ ๋งํฌ์ ์ด ๋ด๊ธด ๋ฐฐ์ด๋ค์ ์คํ๋ ๋ ์ฐ์ฐ์ ํตํด ํ๋์ ๋ฐฐ์ด ๋ด์ ๋ฌถ์ด์ค ๋ค, join ๋ฉ์๋๋ฅผ ํตํด ๋ฌธ์์ด๋ก ์นํํด์ ์์ ์ปจํ ์ด๋์ธ
tabs์ innerHTML์ ํ ๋นํด ์ฃผ์๋ค.
join() ๋ฉ์๋๋ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ์ฐ๊ฒฐํด ํ๋์ ๋ฌธ์์ด๋ก ๋ง๋ญ๋๋ค.
JS์์ ์์ฑํด์ผ ๋ ๋งํฌ์ ๋ค์ด ๋ง์ ๊ฒฝ์ฐ์๋ ๋ค์๊ณผ ๊ฐ์ด innerHTML์ ํตํด ๋ง๋๋ ๊ฒ์ด ์ค๋ณต๋ ์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค.
'JS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์บ๋ฌ์ (Carousel) (0) | 2021.07.10 |
---|---|
Image ์ฌ์ด์ฆ ๊ฐ์ ธ์ค๊ธฐ_JS ํ์ฑ๊ณผ ์คํ ๋์ ์์ (0) | 2021.07.10 |
createDocumentFragment()๋ฅผ ํตํ ์์ ์์ฑ (0) | 2021.07.05 |
stopwatch (0) | 2021.07.05 |
window.matchMedia ๋ฉ์๋ (0) | 2021.07.02 |