문서 객체 모델 (DOM) 이란
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<title> DOM Tree </title>
</head>
<body>
<h1>Hello!</h1>
<a href="https://velog.io/@minjee98" title="나의 개발자블로그">Velog</a>
</body>
</html>
요소.getElementById("아이디값")
: id명로 접근요소.getElementsByClassName("클래스값")
: 클래스명으로 접근, 여러 요소의 배열 형태요소.getElementsByTagName("태그이름")
: 태그명으로 접근, 여러 요소의 배열 형태요소.getElementsByName("name값")
노드.querySelector('CSS선택자')
노드.querySelectorAll('CSS선택자')
: 여러 노드가 노드 리스트 형태let 변수 = document.getElementById('아이디값');
: → 문서(document)에 접근(.)해서 가져올거야(get) 요소를(Element) 아이디로(ById)요소.innerText
: 요소의 내부 HTML 요소.textContent
: 요소의 텍스트 내용요소.innerHTML
: 요소 내에 있는 html과 xml 전부<div id="container">
<p>Hello World</p>
<p style="display:none">Hidden Text</p>
</div>
<script>
let domVal = document.getElementById('container');
console.log(domVal.innerText);
console.log(domVal.textContent);
console.log(domVal.innerHTML);
</script>
<innerText 출력결과>
Hello World
<textContent 출력결과>
Hello World
Hidden Text
<innerHTML 출력 결과>
<p>Hello World</p>
\<p style="display:none">Hidden Text</p>
요소.innerText = '내용'
요소.innerHTML = '<태그>내용</태그>'
요소.innerHTML += '<태그>내용</태그>'
<div id="container">
<p>Hello World</p>
</div>
<button onclick="text()">TEXT</button>
<button onclick="html()">HTML</button>
<button onclick="add()">태그 생성</button>
<script>
let domVal = document.getElementById('container');
function text(){
domVal.innerText = '<h1>JAVA SCRIPT</h1>' //태그까지 같이 출력됨!!
}
function html(){
domVal.innerHTML = '<h1>JavaScript</h1>'
}
function add(){
domVal.innerHTML += '<h1>DOM 활용하기</h1>'
}
</script>
<innerText 내용 변경 결과>
<h1>JAVA SCRIPT</h1>
<innerHTML 내용 변경 결과>JavaScript
<innerHTML 내용 추가 결과>
Hello WorldDOM 활용하기
요소.getAttribute("속성명")
: 요소의 속성 출력
요소.setAttribute("속성명", "값")
: 요소의 속성 값 수정
: 웹 페이지에서 발생하는 사용자의 동작이나 브라우저의 상태 변화와 같은 이벤트를 감지하고, 이에 대한 반응을 정의하는 것
기본적인 흐름 : 이벤트 리스너 등록 → 이벤트 핸들러 함수 작성 → 이벤트 처리
이벤트 리스너 등록하기
요소.addEventListener('이벤트', 실행할 함수명)
요소.addEventListner('이벤트', () => { 실행문장 })
주요 마우스 이벤트
// HTML 요소 선택
const button = document.querySelector('#myButton');
// 이벤트 리스너 등록
button.addEventListener('click', handleClick);
// 이벤트 핸들러 함수
function handleClick(event) {
// 클릭 이벤트 발생 시 실행될 코드 작성
console.log('버튼이 클릭되었습니다.');
}
요소에 함수 직접 연결
const button = document.querySelector('#myButton'); button.onclick = function(event) { console.log('버튼이 클릭되었습니다.'); }
- 하나의 이벤트 핸들러만 등록할 수 있다는 단점 존재
HTML 속성을 사용해서 함수 연결
<!-- HTML 속성 사용하여 연결 --> <button onclick="handleClick()">클릭</button>
이벤트 객체의 주요 속성과 메서드
이벤트.target
: 이벤트가 발생한 요소 반환이벤트.currentTarget
: 이벤트 리스너가 현재 실행 중인 요소 반환이벤트.type
: 발생한 이벤트 타입(이름) 반환이벤트.preventDefault()
: 이벤트를 취소할 수 있는 경우 취소document.요소명.style.속성명
// id가 my-id인 요소의 글자색 바꾸기
document.getElementByID("my-id").style.color = "blue";
classList : 클래스를 추가, 제거, 토글하고, 존재 여부를 확인하는 등의 작업을 수행
요소.classList.add('클래스명')
: 요소의 클래스 목록에 지정된 클래스명 추가요소.classList.remove('클래스명')
: 요소의 클래스 목록에서 지정된 클래스명 제거요소.classList.toggle('클래스명')
: 요소의 클래스 목록에 지정된 클래스명이 있으면 제거, 없으면 추가요소.classList.contains('클래스명')
: 요소의 클래스 목록에 지정된 클래스명이 포함되어 있는지 여부 확인요소.classList.replace('기존클래스명', '새로운클래스명')
: 요소의 클래스 목록에서 지정된 기존 클래스명을 지정된 새로운 클래스명으로 교체요소.classList.item(인덱스)
: 인덱스에 해당하는 클래스명 반환요소.classList.length
: 요소의 클래스 목록에 있는 클래스명 개수 반환const element = document.querySelector('.my-element');
element.classList.add('new-class'); // 클래스 추가
element.classList.remove('old-class'); // 클래스 제거
element.classList.toggle('active'); // 클래스 토글
const hasClass = element.classList.contains('highlight'); // 클래스 포함 여부 확인
element.classList.replace('old-class', 'new-class'); // 클래스 교체
const className = element.classList.item(0); // 클래스 이름 반환
const classCount = element.classList.length; // 클래스 개수 확인
HTML 코드에서 클래스명이 여러 개이면 클래스들은 공백으로 구분하여 표기
<div class="class1 class2">내용</div>
document.createElement('태그명')
: 새로운 요소 노드 생성document.createTextNode('내용')
: 새로운 텍스트 노드 생성document.createAttribute('속성명')
: 새로운 속성 노드 생성속성노드.value = '값'
: 속성 노드의 속성값 지정부모노드.appendChild(자식노드)
요소명.setAttributeNode(속성노드)
부모노드.removeChild(자식노드)
텍스트 노드를 사용하는 새로운 요소 추가하기
속성값이 있는 새로운 요소 추가하기
예시 : 텍스트 노드가 자식 노드로 있는 새로운 요소 추가하기
// 새로운 <div> 요소를 생성합니다.
const newDiv = document.createElement('div');
// 텍스트 노드를 생성합니다.
const textNode = document.createTextNode('새로운 텍스트 노드 입니다~');
// 텍스트 노드를 <div> 요소의 자식 노드로 추가합니다.
newDiv.appendChild(textNode);
// 해당 요소를 원하는 부모 요소에 추가합니다.
const parentElement = document.querySelector('#parent');
parentElement.appendChild(newDiv);
innerHTML로 사용한 예시
// 부모 요소의 innerHTML에 새로운 HTML 코드를 추가합니다. const parentElement = document.querySelector('#parent'); parentElement.innerHTML += '<div>새로운 텍스트 노드 입니다~</div>';