1. getElementById() ์ ๋ ฅ์ฐฝ, ์ ๋ ฅ์ฐฝ๊ฐ(value) ๊ฐ์ ธ์ค๊ธฐ |
2. createTextNode() ์ ๋ ฅํ ๋ด์ฉ์ ํ ์คํธ ๋ ธ๋๋ก ๋ณํํ๊ธฐ |
3. createElement() HTML ์์ ์์ฑํ๊ธฐ |
4. appendChild() ๋ถ๋ชจ ์์์ ์์ฑ๋ ์์ ์์ ์ถ๊ฐํ๊ธฐ |
5. addEventListener() ํด๋ฆญ ์ด๋ฒคํธ ํจ์ (์ถ๊ฐ / ์ญ์ ) |
6. remove() HTML ์์ ์ ๊ฑฐํ๊ธฐ |
๊ฐ๋จํ ๋ฉ๋ชจ์ฅ์ ๋ง๋ค๊ธฐ ์ํด ์ ๋ ฅ ์์ญ, ์ถ๊ฐ ์์ญ, ๋ฆฌ์คํธ ์์ญ์ ๊ฐ๋จํ HTML ์ฝ๋๋ก ์์ฑํ๊ณ
์๋ฐ์คํฌ๋ฆฝํธ(Javascript) ๋ก ์ถ๊ฐ, ์ญ์ ๊ธฐ๋ฅ์ ๊ตฌํํ์๋ค.
1. HTML ์ฝ๋ ์์ฑ
(์ ์ฌ์ง์ CSS ๋ฐ๋ก ์ ์ฉ)
<h1>์๋ฐ์คํฌ๋ฆฝํธ ๋ฉ๋ชจ์ฅ ์ถ๊ฐ/์ญ์ </h1>
<!-- ์
๋ ฅ ์์ญ -->
<textarea id="inputMemo" placeholder="๋ฉ๋ชจ๋ฅผ ์
๋ ฅํ์ธ์..."></textarea>
<!-- ๋ฉ๋ชจ ์ถ๊ฐ ๋ฒํผ -->
<button id="saveMemo">๋ฉ๋ชจ ์ถ๊ฐ</button>
<!-- ๋ฉ๋ชจ ๋ฆฌ์คํธ ์์ญ์ญ -->
<ul id="memoList"></ul>
2. Javascript ํจ์ ์ ์
- HTML <textarea></textarea> ํ๊ทธ์ ์ ๋ ฅ ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด getElementById() , createTextNode() ๋ฉ์๋๋ฅผ ์ฌ์ฉ
createElement() ๋ฉ์๋๋ก <li></li> ์์ ์์ฑ ํ appendChild() ๋ฉ์๋๋ก ์ ๋ ฅ๊ฐ(inputValue) ์์ ์ถ๊ฐ
๐ก์ง์ ๋ถ๋ชจ์ ์์์ ๊ด๊ณ๋ฅผ ๊ทธ๋ ค๋ณด๋ ๊ฒ์ด ์ดํด์ ๋์์ด ๋์๋ค.
- ๋ฉ๋ชจ๋ฆฌ์คํธ ์ถ๊ฐ ์ ์ญ์ ๋ฒํผ ๋ํ ์๋์ ๊ฐ์ ๋์ผํ ๋ฐฉ๋ฒ์ผ๋ก ์ ์
function workingMemo() {
const inputMemo = document.getElementById("inputMemo");
const inputValue = document.createTextNode(inputMemo.value);
const newMemo = document.createElement("li");
newMemo.appendChild(inputValue);
.
...์๋ต
.
inputMemo.value = "";
}
๐ค ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์กด์ฌํ๋ค.
( ๊ฐ์ธ์ ์ผ๋ก ์์ ์ฝ๋๊ฐ ๋ ๊ฐ๊ฒฐํ๊ณ ๊น๋ํ ๋๋์ด ์์๋ค.)
function ...(){
const memoInput = document.getElementById('memoInput');
const memoText = memoInput.value;
const memoList = document.getElementById('memoList');
const memoDiv = document.createElement('div');
memoDiv.classList.add('memo');
memoDiv.innerHTML = `
<span>${memoText}</span>
<button class="deleteBtn" onclick="deleteMemo(this)">์ญ์ </button>
`;
memoList.appendChild(memoDiv);
memoInput.value = '';
}
์์ ์ฝ๋๋ innerHTML ์์ฑ์ ์ฌ์ฉํ์ฌ ์์ฑํ <div></div> ํ๊ทธ์ ๋ด๋ถ์ HTML ์ฝ๋๋ฅผ ์ค์ ํ๋ค. ๋ฐฑํฑ(``) ๋ฆฌํฐ๋ด์ ์ฌ์ฉํด
๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์์ด ์ฝ๊ฒ ์์ฑ์ด ๊ฐ๋ฅํ๋ค.
classList.add() ๋ HTML ์์์ ํด๋์ค๋ฅผ ์ถ๊ฐํ ๋ ์ฌ์ฉ๋๋ค.
classList.add('memo') -> <div class="memo"></div>
3. ์ด๋ฒคํธ ์ฒ๋ฆฌ ํจ์ addEventListener() ์ ์
element.addEventListener(event, callback, useCapture);
1. element: ์ด๋ฒคํธ๋ฅผ ๋ฑ๋กํ DOM ์์.
2. event: ์ด๋ฒคํธ์ ์ข
๋ฅ๋ฅผ ๋ฌธ์์ด๋ก ์ง์ (์: click, keydown, mouseover ๋ฑ).
3. callback: ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ ์คํ๋ ํจ์์
๋๋ค.
4. useCapture (์ ํ์ ): ์ด๋ฒคํธ ์ ํ ๋จ๊ณ ์ค์ (true = ์บก์ฒ ๋จ๊ณ, false = ๋ฒ๋ธ ๋จ๊ณ, ๊ธฐ๋ณธ๊ฐ์ false).
๋ฒํผ ํด๋ฆญ ์ ์์ ์ ์ํ workingMemo() ํจ์๋ฅผ ์คํํ๊ณ , event.preventDefault() ๋ ๊ธฐ๋ณธ ์ด๋ฒคํธ ๋์์ ๋ง๋ ๋ฉ์๋๋ก
๋ธ๋ผ์ฐ์ ๊ฐ ์ํํ๋ ๊ธฐ๋ณธ ๋์(๋ํดํธ ๋์) ์ ์ทจ์ํ๋ค.
document.addEventListener("DOMContentLoaded", function () {
const button = document.getElementById("saveMemo");
button.addEventListener("click", function () {
event.preventDefault();
workingMemo();
})
})
์๋ ์ฝ๋๋ ์ญ์ ๋ฒํผ์ ํด๋ฆญ ์ ๋ฒํผ์ ๋ถ๋ชจ ์์์ธ <li></li> ํ๋๋ฅผ ์ญ์ ํ๋ค.
์์์ ์๋ต๋ createElement() ๋ก ์์ฑํ <button class="delete"></button> ๋ฅผ ์ฐพ์
button ์ ๋ถ๋ชจ๋ ธ๋์ธ <li></li> ํ๋๋ฅผ remove() ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ์ญ์ ํ๋ค.
*remove() ๋ฉ์๋๋ DOM ์์๋ฅผ ์ญ์ ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ํด๋น ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ์ ํ๋ ์์๊ฐ DOM ํธ๋ฆฌ์์ ์ ๊ฑฐ๋ฉ๋๋ค.
const memoList = document.getElementById("memoList");
memoList.addEventListener("click", (event) => {
if (event.target.className === "delete") {
if (confirm("์ญ์ ํ์๊ฒ ์ต๋๊น?")) {
event.target.parentNode.remove();
}
}
})
๐โ๏ธ ๊ฐ๋จํ ๋ฉ๋ชจ์ฅ์ ๊ตฌํํ๋ฉด์ "DOM(Document Object Model)" ์ ์ด ๋ฐฉ์์ ๋ํ ์ดํด์ ์ต๋ ์์ค์ด ๋์์ก๋ค.
DOM ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ์ ๊ตฌ์ฑ ์์๋ฅผ ์ตํ๊ณ ๋ง์ ๋ฐ๋ณต ์ฐ์ต์ ํตํด HTML ๋ฌธ์๋ฅผ JavaScript๋ฅผ ํตํด ์กฐ์ํ ์ ์๊ฒ ๋์๋ค.