본문 바로가기

JS

[JS] 자바스크립트 DOM API

DOM API (Document Object Model, Application Programming Interface)

(어플리케이션)웹사이트가 동작하도록 입력하는 프로그래밍 명령

i.e. 자바스크립트에서 (DOM)HTML을 제어하는 여러가지 명령들(API)이다. 

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./main.js"></script>
</head>
<body>
    <div class="box">BOX!</div>    
</body>
</html>

 

CSS 선택자(.box)를 통해 HTML부분에서 특정 요소를 찾아서 그것을 변수 boxEl에 할당한다.

let boxEl = document.querySelector('.box');

console.log(boxEl);

 

하지만 브라우저가 위에서 아래로 HTML코드를 읽어 내려가는 특성으로

HTML <script> 영역까지 코드를 읽고 콘솔창에 값을 출력하는 오류가 발생된다. 

해당 값을 찾을 수 없다고 Null이 뜨게 된다.

 

여기서 script 코드에 defer를 추가하면 브라우저가 코드를 쭉 읽고 다시 <script>로 올라와서 요청한 값을 확인하여 출력하게 된다. 
(CSS .box > html class "box"를 가진 div요소를 찾아서 boxEl에 할당이 되어 출력)  

<title>Document</title>
<script defer src="./main.js"></script>		<!-- defer 추가 -->

콘솔창

 

DOM API  실행 과정

요소 1개검색,찾기를 통한 실행 과정

// HTML 요소(Element) 1개 검색/찾기
const boxEl = document.querySelector('.box');
/*
querySelector: 메소드
('.box'): class 선택자 인수
boxEl: box요소 약자

해당 CSS 선택자를 통해 찾아진 요소 중 가장 먼저 찾은 요소 하나만 반환하는 특징이 있다.
*/

// HTML (boxEl)요소에 메소드 추가 가능
boxEl.addEventListener();

// 명령어 addEventListener 메소드에 인수(Arguments, 데이터X) 추가 가능
boxEl.addEventListener(1,2);

// 1 - 첫 번째 인수_이벤트(Event, 상황)
boxEl.addEventListener('click', 2);
/*
사용자가 boxEl를 클릭했을 때의 상황을 브라우저는 '이벤트'라고 본다.
i.e. 클릭이라는 상황이 일어나면 무언가를 하겠다는 의미로 사용되는 코드이다.
*/

// 2 - 두 번째 인수_핸들러(Handler, 실행할 함수)
boxEl.addEventListener('click', function (){
  console.log('click!');
});
/*
두 번째 인수에 익명 함수를 대신 넣어 데이터처럼 활용한다.
i.e. boxEl에 이벤트를 추가할지 듣고 있다가 클릭이 일어나면 익명 함수를 실행시킨다는 의미이다.  
*/

 

js에서 class 추가하기

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script defer src="./main.js"></script>
</head>
<body>
    <div class="box">BOX!</div>    
</body>
</html>

 

그리고 콘솔창에 active 추가/제거 하고 추가/제거 되었는지 확인도 함께 해준다.

let boxEl = document.querySelector('.box');

console.log(boxEl);

boxEl.addEventListener('click', function(){
  console.log('Click!');  // 콘솔창에 click! 출력하기
  boxEl.classList.add('active');
  console.log(
    boxEl.classList.contains('active') // 콘솔창에 class active 추가 확인하기
  );
  boxEl.classList.remove('active');
  console.log(
    boxEl.classList.contains('active') // 콘솔창에 class active 제거 확인하기
  );
});
콘솔창

콘솔창

 

요소 모두 색,찾기를 통한 실행 과정

// HTML 요소(Element) 모두 검색/찾기
const boxEls = document.querySelectorAll('.box');
console.log(boxEls);

// 찾은 요소들 반복해서 익명 함수로 실행
// 여기서 익명 함수를 인수로 추가했다.
boxEls.forEach(function (){});

// 첫 번째 매개변수(boxEl): 반복되는 요소 (이름 지정 가능)
// 두 번째 매개변수(index): 반복되는 번호 (통상적으로 index로 사용)
boxEls.forEach(function (boxEl, index){});

// 콘솔창 출력
boxEls.forEach(function (boxEl, index){
  boxEl.classList.add(`other-${index + 1}`);
  console.log(index, boxEl);
});

 

이런 데이터를 기반으로 js를 통해 box class order번호 만들어 보자!

const boxEls = document.querySelectorAll('.box');

boxEls.forEach(function (boxEl, index){
  boxEl.classList.add(`order-${index + 1}`);
  console.log(index, boxEl);
});

콘솔창

 

textContent 라는 속성을 통해 text로 된 내용을 얻고

이 text 를 다른 내용으로 지정하는 것을 보도록 하자!

const boxEl = document.querySelector('.box');

// Getter, 값을 얻는 용도
// textContent 라는 속성을 통해 text로 된 내용이 반환되는 것.
console.log(boxEl.textContent); // Box!!

// Setter, 값을 지정하는 용도
// textContent 부분에 1 대신 Evelyn!을 넣겠다(지정하겠다).
boxEl.textContent = 'Evelyn!';
console.log(boxEl.textContent); // Evelyn!!

콘솔창_문자데이터 1과 브라우저 화면에 1을 Evelyn!으로 지정된 것을 볼 수 있다.

반응형