Jieunny์ ๋ธ๋ก๊ทธ
S3) Unit 1. [์ค์ต] Tree UI ๋ณธ๋ฌธ
๐ฃ ์ฌ๊ท๋ก Tree UI ๊ตฌํํ๊ธฐ
1๏ธโฃ Test ์กฐ๊ฑด
โ๏ธ <ul id="root"> ์์ tree view๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
โ ul#root ์๋ฆฌ๋จผํธ๊ฐ ์กด์ฌํด์ผ ํฉ๋๋ค.
โ ul#root ์๋ฆฌ๋จผํธ ์์ tree view๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค.
โ๏ธ menu ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด tree view๋ฅผ ๊ตฌ์ฑํฉ๋๋ค.
โ ul#root ์๋ฆฌ๋จผํธ ์์ ์นดํ
๊ณ ๋ฆฌ(์๋ฃ, ์์, ๊ตฟ์ฆ, ์นด๋)๋ฅผ ๋ ๋๋งํ 4๊ฐ์ li ์๋ฆฌ๋จผํธ๊ฐ ์์ด์ผ ํฉ๋๋ค.
โ ์นดํ
๊ณ ๋ฆฌ(์๋ฃ, ์์, ๊ตฟ์ฆ, ์นด๋) ์๋ฆฌ๋จผํธ ์์๋ ๊ฐ๊ฐ ์์ ๋
ธ๋๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๊ฐ์ถฐ์ค checkbox๊ฐ ์กด์ฌํด์ผ ํฉ๋๋ค.
โ ์๋ฃ, ์์, ๊ตฟ์ฆ, ์นด๋ ์นดํ
๊ณ ๋ฆฌ ์ด๋ฆ(name)์ span ํ๊ทธ๋ก ๊ฐ์ธ์ผ ํฉ๋๋ค.
โ ์์ ๋
ธ๋๊ฐ ์๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, li ์๋ฆฌ๋จผํธ ์์ ๋จ์ํ ์ด๋ฆ(name)๋ง ํ์ํฉ๋๋ค. (checkbox ๋ฐ span, ul์ ํฌํจํ๋ฉด ์๋ฉ๋๋ค)
โ ์์ ๋
ธ๋๊ฐ ์๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, li ์๋ฆฌ๋จผํธ ์๋์ ์์ ๋
ธ๋๋ฅผ ๋ ๋๋งํ ์๋ก์ด ul์ด ์กด์ฌํด์ผ ํฉ๋๋ค. (1)
โ ์์ ๋
ธ๋๊ฐ ์๋ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ, li ์๋ฆฌ๋จผํธ ์๋์ ์์ ๋
ธ๋๋ฅผ ๋ ๋๋งํ ์๋ก์ด ul์ด ์กด์ฌํด์ผ ํฉ๋๋ค. (2)
โ type ์์ฑ์ด item์ธ ๊ฐ์ฒด๋ li ํ๊ทธ๋ก name ์์ฑ๊ฐ์ ๊ฐ์ธ์ฃผ์ด์ผ ํฉ๋๋ค.
2๏ธโฃ ์์ฑ ์ฝ๋
const root = document.getElementById('root');
function createTreeView(menu, currentNode) {
// TODO: createTreeView ํจ์๋ฅผ ์์ฑํ์ธ์.
// root ์๋ฆฌ๋จผํธ์์ ์นดํ
๊ณ ๋ฆฌ li ๋ง๋ค๊ธฐ
for(let i=0; i<menu.length; i++){
let category = document.createElement('li');
if(menu[i].children){
// children์ด ์์ ๊ฒฝ์ฐ์๋ง
let chkBox = document.createElement('input');
// ์ฒดํฌ๋ฐ์ค ๋ง๋ค๊ธฐ
chkBox.setAttribute('type', 'checkbox');
let name = document.createElement('span');
// name ๋ง๋ค๊ธฐ
name.textContent = menu[i].name;
root.appendChild(category);
category.appendChild(chkBox);
category.appendChild(name);
// ๊ฐ ์์ root์ ์์์ผ๋ก ์ถ๊ฐํด์ฃผ๊ธฐ
let innerUl = document.createElement('ul');
// ul ์์ ๋ค์ด๊ฐ ul ๋ง๋ค๊ธฐ(์ฌ๊ท ํจ์์ ๋งค๊ฐ๋ณ์๋ก ์ค ๊ฐ)
category.appendChild(innerUl);
currentNode.appendChild(category);
// ํ์ฌ ๋
ธ๋์ ํ์ฌ ์์
ํ๊ณ ์๋ ๋
ธ๋ ์ถ๊ฐ
// ์ฌ๊ท๋ก ํธ์ถ๋ ์๋ก ๋์ด๋๋ค.
createTreeView(menu[i].children, innerUl);
// ๋ฐ์ ์์์ด ์์ผ๋ฉด ์ฌ๊ท๋ก ํจ์ ๋ถ๋ฌ์ ๊ทธ ์์๋ค๋ ๋๊ฐ์ด ๋ ๋๋ง ํด์ฃผ๊ธฐ
}
else{
// ์์์ด ์๋ ๊ฒฝ์ฐ
root.appendChild(category);
category.textContent = menu[i].name;
currentNode.appendChild(category);
}
}
}
createTreeView(menu, root);
3๏ธโฃ ์์ฐ ํ๋ฉด
'CodeStates > Training' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
S3) Unit 2. [์ค์ต] Figma ํด๋ก (์ธ์คํ๊ทธ๋จ) (0) | 2023.02.17 |
---|---|
S3) Unit 2. [์ค์ต] Figma (0) | 2023.02.16 |
S3) Unit 1. [์ค์ต] JSON.stringify (0) | 2023.02.14 |
S2) Unit 11. [์ค์ต] Cozโ Mini Hackathon (์๊ณ ๋ผ์คํ ์ด์ธ ์๋ฒ) (0) | 2023.02.09 |
S2) Unit 10. [์ค์ต] StatesAirline Server (0) | 2023.02.08 |