JavaScript
→ HTML
: 자바스크립트에서 동적 기능 구현을 위해 HTLM 웹 페이지에 접근 <p>Hello students!</p>
<button id="btn" type="button">Click Me</button>
// button 요소에 접근 (HTML 요소에 접근)
const btnElement = document.getElementById('btn');
// button 요소에 이벤트 부여 (클릭시 알림창 출력) >>> 동적 기능 구현
btnElement.addEventListener('click', function () {
alert('Welcome to Wecode Coding Bootcamp!');
});
DOM
입니다.💡 DOM의 정의를 이해하고, 개념을 더 깊이 알기위해 노력하지 않아도 괜찮습니다.
우리가 원하는 것은 JavaScript 코드에서 HTML을 조작하여 → Interactive한 웹사이트를 만드는 것 뿐!
DOM이 바로 JavaScript와 HTML을 연결해주는 매개체입니다! DOM을 잘 몰라도 JavaScript 코드를 직접 쳐보면, HTML을 접근하여 화면의 요소들을 변경할 수 있게 됩니다.
<!DOCTYPE html>
<html>
<head>
<title>Critical Path</title>
</head>
<body>
<p>Hello <span>web performance</span> students!</p>
<div><img src="awesome-photo.jpg"></div>
</body>
</html>
☝🏻DOM을 통해 HTML 파일의 요소들을 → 위의 그림과 같이 노드(Node)의 계층(Tree) 구조로 표현☝🏻
DOM(Document Object Model)
문서 객체 모델DOM
은 HTML을 계층화시켜 트리(Tree)
구조로 만든 객체(Object)
모델(Model)
입니다.document 객체
는 DOM 트리
의 Root Node
, 즉 <html>
요소에 접근하게 해줍니다.DOM
은 웹 페이지 문서, 즉 HTML과 자바스크립트를 서로 잇는 역할입니다.DOM
을 통해 HTML 페이지에 접근하고 페이지를 수정할 수 있습니다.document
라는 변수로 접근할 수 있습니다.Google 홈페이지에 접속합니다. www.google.com
개발자 도구 console
패널을 열고, 아래 코드를 입력합니다.
document.body.style.backgroundColor = 'red';
document
에 접근body
태그의 style
(CSS) backgroundColor
’red’
빨간색 으로 수정input
태그를 사용한) id와 비밀번호 입력란에 작성한 값을 JavaScript에서 접근해서 가져와야 합니다. → 가져온 값으로 로그인 시도!input
태그를 사용한) 각종 회원가입 용 정보에 작성한 값을 JavaScript에서 접근해서 가져와야 합니다. → 가져온 값으로 회원가입 시도!tag
- 태그 이름을 이용한 요소 취득const allPtags = document.getElementsByTagName('p');
<p>
요소가 배열의 형태로 담겨서 반환됩니다.querySelector
- CSS 선택자를 이용한 요소 노드 취득const el = document.querySelector('.category_item');
category_item
라는 클래스를 사용하는 첫 번째 요소가 반환됩니다.getElementsByTagName
메서드를 사용한 것과 달리, 배열이 아닌 요소를 반환합니다.getElementById
- id를 이용한 요소 취득const element = document.getElementById('NM_NEWSSTAND_HEADER');
NM_NEWSSTAND_HEADER
인 요소가 반환됩니다.getElementsByClassName
- class를 이용한 요소 취득const element = document.getElementsByClassName('category_item');
category_item
인 모든 요소가 배열의 형태로 담겨서 반환됩니다.innerHTML
- 내용(content) 조작// HTML body 태그에 접근하여 내용 조작
document.body.innerHTML = '내용 다 바꿈';
innerHTML
을 통해 요소의 내용(content
), 즉 시작 태그와 종료 태그 사이의 내용에 접근하여 수정할 수 있습니다.body
태그에 접근하여 내부 내용을 '내용 다 바꿈'
이라는 문자열로 조작했습니다.body
태그 자식 요소가 많더라도 innerHTML
을 사용하면 안의 내용이 전부 교체됩니다.style
- 스타일 조작// id가 'NM_NEWSSTAND_HEADER'인 요소 취득 >> 변수에 저장
const element = document.getElementById('NM_NEWSSTAND_HEADER');
// 해당 요소의 스타일 조작
element.style.backgroundColor = 'blue';
style
에 접근하여 스타일을 조작할 수 있습니다.id
가 NM_NEWSSTAND_HEADER
인 요소를 취득하였습니다.element
변수에 저장하였습니다.style
에 접근하여 배경색(backgroundColor
)을 ‘blue’
로 조작하였습니다.camelCase
를 사용합니다.createElement
- 요소 생성// h1 요소 생성 및 내용 추가
const item = document.createElement('h1'); // <h1></h1>
item.innerHTML = '제목추가' // <h1>제목추가</h1>
// h1 요소를 추가하고 싶은 위치 취득
const newsHeader = document.getElementById('NM_NEWSSTAND_HEADER');
// newsHeader자식으로 item 추가
newsHeader.appendChild(item);
.createElement(tagName)
함수를 사용하면 HTML 요소(element
)를 생성할 수 있습니다.createElement
함수를 통해 h1
요소를 생성하고 item이라는 변수에 할당했습니다.h1
요소에 innerHTML
을 통해 내용(content
)을 설정하였습니다.append
시키는 방법이 있습니다. (appendChild
)id
가 NM_NEWSSTAND_HEADER
인 요소를 찾아서, 자식으로 추가해보겠습니다.h1
요소를 추가합니다.속성(attribute)
조작// 요소에 id 수정(추가)
element.id = 'newId';
// 요소에 class 수정(추가)
element.className = 'newClass';
// 요소 스타일 수정(추가)
element.style.backgroundColor = "red";
document
객체로 특정 요소(element)
에 접근할 수 있듯이, 요소의 속성(attribute)
에도 접근할 수 있습니다.id
, 혹은 class
도 추가하고 style
값도 수정할 수 있습니다.흔히 우리가 HTML에서 제어하는 div, span, input 등의 요소들을 DOM이라고 하고, 프로그램을 사용하기 위한 명령들의 집합을 API
(Application Programming Interface) 라고 합니다.
즉, DOM API는 HTML의 요소들을 JS에서 제어하기 위한 명령들의 집합을 뜻함
querySelector()
는 document 에 속한 함수, 즉 메소드로써 인수에 CSS의 선택자를 작성하면 해당 HTML 문서에서 일치하는 요소를 1개만 반환합니다.<!--HTML-->
<div class="this">1번 요소</div>
<div class="this">2번 요소</div>
<div class="this">3번 요소</div>
document.querySelector('.this') // 1번 요소 하나만 선택.
<!--HTML-->
<div class="this">1번 요소</div>
<div class="this">2번 요소</div>
<div class="this">3번 요소</div>
document.querySelectorAll('.this') // ["1번 요소", "2번 요소", "3번 요소"] < 배열로 표시
document.querySelectorAll('.this')[1] // 2번 요소를 선택.
//0부터 순서를 지정한다.
출처
wecode
https://velog.io/@chl4842/DOM-API