JavaScript를 사용할 수 있으면, DOM으로 HTML을 조작할 수 있다.
HTML에 자바스크립트를 적용하기 위해서는 <script> 태그를 이용한다.
웹 브라우저가 <script> 요소를 만나면 HTML 해석을 일시정지하고 <script> 요소를 먼저 실행한다.
DOM 구조 조회할 때 -> console.dir()
console.dir()은 DOM을 객체의 모습으로 출력한다.
HTML Element를 추가
// div element를 변수 createDiv에 할당
const createDiv = document.createElement('div')
HTML Element를 부모 노드에 포함
// createDiv를 트리 구조에 연결
document.body.append(tweetDiv)
HTML Element를 조회
querySelector// 클래스 이름이 box인 HTML 요소 조회
const oneBox = document.querySelector('.box')
querySelectorAll클래스 이름이 box인 요소가 여러 개 있을 때 여러 개의 요소를 한 번에 가져오기 위해서는, querySelectorAll을 사용한다.
// querySelectorAll로 클래스 이름이 box인 모든 HTML 요소를 유사 배열로 받아온다.
const boxes = document.querySelectorAll('.box')
querySelector와 비슷한 역할을 하는 오래된 방식
const container = document.querySelector('#container')
const boxDiv = document.createElement('div')
container.append(boxDiv)
HTML Element를 변경
<div> 엘리먼트 생성const oneDiv = document.createElement('div');
console.log(oneDiv) // <div></div>
textContent - 엘리먼트에 문자열 입력oneDiv.textContent = 'dev';
console.log(oneDiv) // <div>dev</div>
classList.add - 엘리먼트에 클래스 추가oneDiv.classList.add('tweet')
console.log(oneDiv) // <div class="tweet">dev</div>
const container = document.querySelector('#container')
container.append(oneDiv)
setAttribute 메서드 - class와 id 말고는 다른 attribute를 추가https://developer.mozilla.org/ko/docs/Web/API/Element/setAttribute
HTML Element를 삭제
remove 메서드 - 먼저 삭제하려는 요소의 위치를 알고 있는 경우// id가 container인 요소 아래에 oneDiv를 추가하고, remove로 삭제
const container = document.querySelector('#container')
const oneDiv = document.createElement('div')
container.append(oneDiv)
oneDiv.remove() // 이렇게 append 했던 요소를 삭제할 수 있다.
innerHTMLinnerHTML을 이용하면, 아주 간단하게 모든 자식 요소를 삭제할 수 있지만 보안 문제를 가진다.
// id가 container인 요소 아래의 모든 요소를 삭제
document.querySelector('#container').innerHTML = '';
removeChild - 자식 요소를 지정해서 삭제하는 메서드// 자식 요소가 남아있지 않을 때까지, 첫 번째 자식 요소를 삭제
const container = document.querySelector('#container');
while (container.firstChild) {
container.removeChild(container.firstChild);
}
// container의 자식 요소가 1개만 남을 때까지, 마지막 자식 요소를 제거
const container = document.querySelector('#container');
while (container.children.length > 1) {
container.removeChild(container.lastChild);
}
// 클래스 이름이 box인 요소만 찾아서 제거
const boxes = document.querySelectorAll('.box')
tweets.forEach(function(box){
box.remove();
})
// or
for (let box of boxes){
box.remove()
}
이벤트 객체는 사용자 입력(onclick, onkeyup, onscroll 등)을 트리거로 발생한 이벤트 정보를 담은 객체
let menus = document.querySelectorAll("button"); //모든 버튼을 가져옵니다.
let btnAmericano = menus[0];
let btnCaffelatte = menus[1];
btnAmericano.onclick = handleClick;
btnCaffelatte.onclick = handleClick; // for 문으로도 충분히 구현할 수 있는 내용입니다.
// 사용자가 버튼을 클릭하면, 그 버튼의 textContent(또는 innerHTML)을 이용해 메뉴의 이름을 가져올 수 있다.
function handleClick(event) {
// 아래의 빈칸(____)을 채우세요.
let currentMenu = e.target.textContent; // TODO
console.log(currentMenu + "를 클릭하셨습니다.");
Onclick vs AddEventListenerhttps://nangman14.tistory.com/27
https://poiemaweb.com/js-event
https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event
https://jenny-daru.tistory.com/17