
💡 Tip!
현재 웹 브라우저에서 DOM을 조작하는 언어가 자바스크립트 뿐이라 자스 == DOM 이라고 생각할 수 있지만 DOM은 꼭 자스로 구현되는 것 만은 아니라고 한다! 다른 언어로도 구현 가능함.
DOM은 자스 없이도 DOM 인터페이스 구현만으로도 조작이 가능하다.
| 메서드 | 설명 |
|---|---|
document.querySelector(선택자) | 선택자로 1개 선택. CSS 선택자를 사용하여 요소를 선택함 |
document.querySelectorAll(선택자) | 선택자로 여러 개 선택. CSS 선택자를 사용하여 여러 요소를 선택함 |
document.getElementById(id) | 아이디로 1개 선택. 주어진 ID 속성을 가진 요소를 선택함 |
document.getElementsByTagName(tagName) | 태그 이름으로 여러 개 선택. 주어진 태그 이름을 가진 모든 요소를 선택함 |
document.createElement(tagName) | 새로운 요소 생성. 주어진 태그 이름을 가진 새로운 요소를 생성함 |
node.appendChild(node) | 자식 노드 추가. 선택한 노드에 자식 노드를 추가함 |
node.removeChild(node) | 자식 노드 제거. 선택한 노드에서 자식 노드를 제거함 |
element.innerHTML | 문서 객체 내부 글자의 HTML 태그를 반영해 가져오도록 변경 |
node.textContent | 문서 객체 내부 글자를 순수 텍스트 형식으로 가져오도록 변경 |
element.setAttribute(name, value) | 속성 설정. 선택한 요소에 주어진 이름과 값을 가진 속성을 설정함 |
element.getAttribute(name) | 속성 값 가져오기. 선택한 요소에서 주어진 이름을 가진 속성의 값을 반환함 |
element.addEventListener(type, listener) | 이벤트 리스너 등록. 선택한 요소에 이벤트 리스너를 등록하여 지정된 이벤트가 발생할 때 호출됨 |
(등등)
위의 방법들로 동적으로 노드를 생성하거나 삭제 / 변경이 가능하다.
정적 생성
- 웹 페이지를 처음 실행할 때 HTML 태그로 적힌 문서 객체를 생성하는 것
동적 생성
- 웹 페이지를 실행 중에 자바스크립트를 사용해 문서 객체를 생성하는 것
addEventListener 메서드사용하여 이벤트 연결document.addEventListener("keyup", () => {
// 문장
});
document.input.onkeyup = () => { // onkeyup은 속성
// 문장
});
<script>
const listner = (e) => {
}
</script>
<body onkeyup="listner(e)">
</body>
<head> 에 위치한 <script> 가 <body> 에 있는 문서에 접근하려면body 태그가 생성되기 전에 위치 해 있는 놈이라서 바디로 접근할 수가 없음.DOMContentLoaded 요 놈이 DOM 조작을 가능하게 함document.addEventListener("DOMContentLoaded", (event) => {
console.log("HTML 문서가 완전히 로드&&파싱됨");
});
코드의 규모가 커지면 이벤트 리스너를 외부로 분리하는 경우가 늘어난다. 이럴 경우 이벤트를 발생한 객체에 어떻게 접근을 할 수 있을까?
event.currentTarget 속성 사용this 키워드 사용기본 이벤트 : 어떤 이벤트가 발생했을 때 웹 브라우저가 기본적으로 처리해주는 것
ex) (링크 클릭 시 이동, 제출 버튼 클릭 시 이동 등)
preventDefalut() : 기본 이벤트 제거 시 사용하는 메서드button 태그 관련 -
<button></button>👉 클릭 이벤트
- ❗
<form>태그 안에 버튼 태그가 있다면 input의 type="submit"과 동일하게 동작함.<input type="button" />👉 클릭 이벤트<input type="submit" /> 👉 submit 이벤트
- ❗
<form>태그 안에 위치해야 함💡
<form>태그 내 submit 버튼을 누를 경우 form 태그 전체 데이터 제출 이벤트 발생.
💡 버튼 태그는 type을 명시하지 않을 경우 기본으로 submit 기능을 수행함.
// ex
// 데이터 저장
localStorage.setItem('username', 'doopal');
// 데이터 가져오기
let username = localStorage.getItem('username');
// 특정 데이터 삭제
localStorage.removeItem('username');
// 모든 데이터 삭제
localStorage.clear();
// 저장된 데이터 개수 확인
let count = localStorage.length;
JSON.stringify와 JSON.parse 메서드를 사용.JSON.stringify : 자스 객체 > JSON 문자열JSON.parse : JSON 문자열 > 자스 객체// JSON 객체
let user = {
name: 'doopal',
age: 20,
email: 'doopal@example.com'
};
// JSON 객체를 문자열로 변환하여 localStorage에 저장
localStorage.setItem('user', JSON.stringify(user));
// localStorage에서 JSON 문자열을 가져오기
let userStr = localStorage.getItem('user');
// JSON 문자열을 JSON 객체로 변환
let userObj = JSON.parse(userStr);
console.log(userObj.name); // 'doopal'
console.log(userObj.age); // 20
console.log(userObj.email); // 'doopal@example.com'