🌈 DOM / BOM 이해
🔥 DOM과 BOM이란?
🔥 DOM 객체 다루기
🔥 DOM 이벤트(Event)
1. DOM과 BOM이란?
- DOM(Document Object Model) : 웹 문서의 모든 요소를 JavaScript를 이용하여 조작할 수 있도록 객체를 사용해 문서를 해석하는 방법
- 즉, 웹에서 문서에 삽입된 모든 각 요소(텍스트, 그림 등)를 객체로 인식하고 조작하는 것을 문서 객체모델, 또는 DOM이라 부름
- BOM(Browser Object Model)은 웹브라우저 전체를 객체로 관리하는 것을 의미하며, JavaScript를 이용하여 웹브라우저 창 등을 조작할 수 있음
1) DOM 객체 예시
- document 객체를 통해, HTML/CSS 등을 수정 및 제어 가능
document.body.style.background = 'red'
2) BOM 객체 예시
- navigator 객체 : 브라우저와운영체제 정보 제공
- location 객체 : URL 관련 핸들링
console.log(navigator.userAgent);
console.log(navigator.platform);
console.log(location.href);
2.DOM 객체 다루기
1) DOM 객체 생성(Create)
- document 객체를 통해 HTML 요소를 생성/추가 할 수 있음
- 생성 후 추가해줘야지만 웹에 표시됨
- 🔍 document.createElement('태그명') 👈 HTML 태그 생성
- 🔍 document.appendChild('요소') 👈 HTML 요소에 태그 추가
2) DOM 객체 선택(Read)
- document 객체를 통해 제어할 HTML 요소를 찾아 선택할 수 있음
- 🔍 document.getElementById('ID명') 👈 id이름으로 찾기
- 🔍 document.getElementsByClassName('클래스명') 👈 해당하는 요소들을 배열로 반환
- 🔍 document.getElementsByTagName('태그명') 👈 해당하는 요소들을 배열로 반환
- 🔍 document.querySelector('CSS 셀렉터') 👈 해당하는 첫번째 요소를 반환
- 🔍 document.querySelectorAll('CSS 셀렉터') 👈 해당하는 모든 요소를 배열로 반환
- 🔍 element.parentNode 👈 해당 element의 부모 요소 탐색
- 🔍 element.nexElementSibling 👈 해당 element의 같은 레벨의 다음 형제 요소 탐색
- 🔍 element.previousElementSibling 👈 해당 element의 같은 레벨의 이전 형제 요소 탐색
- 🔍 element.children 👈 해당 element의 자식 요소들 탐색(배열 형태)
3) DOM 객체 수정(Update)
- 🔍 element.innerText = '입력 내용' 👈 element에 '입력 내용'으로 text 수정
- 🔍 element.innerHTML = '입력 내용' 👈 element에 text을 포함해 html태그도 넣음
- 🔍 element.style.속성명 = '값' 👈 CSS 속성 값 수정
- 🔍 element.setAttribute(속성, 값) 👈 속성을 세팅하거나, 수정 가능
const yello_div = document.createElement("div");
yello_div.innerText = "Yellow Div";
yello_div.setAttribute("class", "box1");
yello_div.style.background = "yellow";
document.body.appendChild(yello_div);
4) DOM 객체 삭제(Delete)
- 🔍 document.removeChild('element') 👈 요소(element) 삭제
- 🔍 document.replaceChild('A', 'B') 👈 B 요소(element)를 A요소로 대체
const green_box = document.createElement("div");
green_box.innerText = "Green Box";
green_box.style.background = "green";
const red_box = document.createElement("div");
red_box.innerText = "Red Box";
red_box.style.background = "red";
document.body.appendChild(green_box);
document.body.removeChild(green_box);
document.body.appendChild(red_box);
document.body.replaceChild(green_box, red_box);
3. DOM 이벤트(Event)
1) event 유형
- 이벤트란 웹페이지에서 발생하는 결과를 코드에 알리기 위해 전달
- 🔍 load : 로드가 완료되었을 때 발생
- 🔍 resize : 윈도우 크기가 변경되었을 때 발생
- 🔍 keydown : 키를 눌렀을 때 발생
- 🔍 keyup : 키에서 손을 땟을 때 발생
- 🔍 change : 변동이 있을 때 발생
- 🔍 click : 클릭할 때 발생
- 🔍 focus : 포커스를 주었을 때 발생
- 🔍 mousedown : 마우스 커서로 클릭했을 때 발생
- 🔍 mouseout : 마우스 커서가 객체 밖으로 벗어났을 때 발생
- 🔍 mouseover : 마우스 커서가 객체 위로 올려졌을 때 발생
- 🔍 mousemove : 마우스 커서가 움직였을 때 발생
- 🔍 mouseup : 마우스에서 손을 땟을 때 발생
- 🔍 select : option 태그 등에서 선택을 했을 때 발생
2) event 등록
- addEventListener()를 통해 이벤트가 발생되었을 때 실행할 함수를 설정 할 수 있음
- 🔍 [event target].addEventListener('event type', function name);
- addEventListener()는 타겟이 대상에 어떤 유형의 이벤트가 발생되면 함수를 실행시킴
<!DOCTYPE html>
<html>
<body>
<script>
addEventListener("click", ()=>{
alert('Clicked');
})
</script>
</body>
</html>
- removeEventListener()를 통해 이벤트가 발생되었을 때 삭제 가능
- 🔍 [event target].removeEventListener('event type', function name);
- removeEventListener()는 이미 등록한 event와 인자를 동일하게 작성해주어야 함
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 200px;
height: 200px;
border: 1px solid;
border-radius: 8px;
text-align: center;
line-height: 200px;
font-size : 20px;
font-weight : bold;
}
.box {
background: tomato;
}
</style>
</head>
<body>
<div class="box">tomato box</div>
<script>
const box = document.querySelector(".box");
box.addEventListener("mouseover", () => {
box.style.background = "darkseagreen";
box.innerText = 'You mouseover';
});
box.addEventListener("mouseout", () => {
document.body.removeChild(box);
});
</script>
</body>
</html>