프론트엔드/Javascript

JS - DOM / 노드 선택 및 조작 / 이벤트 다루기

두개의 문 2023. 8. 16. 21:54

◉ DOM

 

▪︎ 웹 브라우저는 문서 객체 모델(DOM)을 생성할 수 있음 

  - 생성한 문서 객체 모델을 통해 HTML 문서의 구성 요소를 객체로 인식할 수 있음 

  - 자바스크립트가 웹 브라우저의 문서 객체 모델을 조작해 웹 브라우저에 표시되는 HTML 문서 구조를 변경하거나, 새로운 구성 요소를 추가하는 등의 작업을 할 수 있음 

 

▪︎ DOM이 생성되는 방식

  - 웹 브라우저가 HTML 문서를 해석 → 해석한 HTML 문서 구조를 객체로 변환하는 방식으로 생성됨 

  - 다음 그림과 같이 DOM 트리 형태로 문서 구조를 변환함 

  - document 객체 하위에 HTML 태그 요소, 속성, 텍스트, 주석 등이 트리 형태로 구성 → 각각을 노드(node)fkrh gka 

 

 


 메서드로 드 선택하기 

 

▪︎ 자바스크립트로 웹 브라우저에 표시되는 HTML 문서를 조작하려면, DOM을 조작해야 함 

▪︎ DOM은 window 객체의 document 객체를 사용해서 조작 가능 

 

 

1. 속성명과 태그명 사용하기 - get 메서드 

메서드 형식 설명 
getElementById(<id 속성값>) id 속성값과 일치하는 요소 노트를 1개만 선택 
getElementsByClassName(<class 속성값>) class 속성값과 일치하는 요소 노드를 모두 선택 
getElementsByTagName(<태그명>) 태그명과 일치하는 요소 노드를 모두 선택 

 

<body>
    <h1 id="title">title</h1>
    <p class="text">text-1</p>
    <p class="text">text-2</p>
    <script>
      // id 속성값이 title인 요소 노드 1개를 선택
      const el = document.getElementById("title");
      console.log(el);
      // class 속성값이 text인 요소 노드 모두 선택 
      const classEl = document.getElementsByClassName("text");
      console.log(classEl);
      // p 태그에 해당하는 요소 노드 모두 선택 
      const tagEls = document.getElementsByTagName("p");
      console.log(tagEls);
    </script>
</body>

 

 

 

 

2. CSS 선택자 사용하기 - query 메서드 

▪︎ document 객체의 메서드 중에는 매개변수로 CSS 선택자를 전달받아 노드를 선택하는 메서드도 있음 

▪︎ CSS 선택자를 사용하는 메서드 

메서드 형식  설명 
querySelector(<CSS 선택자>) 매개변수로 넘어오는 CSS 선택자에 해당하는 노드를 1개만 선택 
querySelectorAll(<CSS 선택자>) 매개변수로 넘어오는 CSS 선택자에 해당하는 노드를 모두 선택 

 

 


◉ 노드 조작하기 

 

1. 콘텐츠 조작하기 

▪︎ 요소 노드의 콘텐츠 조작 속성

속성 설명 
textContext 요소 노드의 모든 텍스트에 접근
innerText 요소 노드의 텍스트 중 웹 브라우저에 표시되는 텍스트에만 접근 
innerHTML 요소 노드의 텍스트 중 HTML 태그를 포함한 텍스트에만 접근 

 

▪︎ 다음과 같은 HTML 코드가 있음 

<p id-"title">Hello, <span style="display:non;">Javascript!</span></p>

 

 - 콘텐츠 조작 속성으로 접근하여 각 속성의 콘텐츠를 가져와보자 

document.getElementById("title").textContent; 	// Hello, Javascript!
document.getElementById("title").innerText;	// Hello,
document.getElementById("title").innerHTML; 	// Hello, <span style="display:non;">Javascript!</span>

 

 

 

2. 메서드로 속성 조작하기 

▪︎ 속성 조작 메서드 

메서드 형식  설명 
<노드>.getAttribute("속성명"); 속성값을 가져옴 
<노드>.setAttribute("속성명", "속성값"); 속성값을 설정함 
<노드>.removeAttribute("속성명"); 속성을 삭제함 

 

▪︎ getAttribute() 

  - 선택된 요소 노드의 속성값을 가져오고 싶을 때 사용 

<a href="https://www.naver.com">네이버</a>
<script>
	const aEl = document.querySelector("a");
    const href = aEl.getAttribute("href");
    console.log(href);
</script>

  - querySelector() 메서드로 a 태그에 해당하는 요소 노드 선택 

    → getAttribute() 메서드로 href 속성값을 가져옴 

 

 

▪︎ setAttribute()

  - 속성값을 새로 설정하고 싶을 때 사용 

<a href="https://www.naver.com">네이버</a>
<script>
    const aEl = document.querySelector("a");
    const href = aEl.getAttribute("href");
    aEl.setAttribute("href", "www.daum.net");
    aEl.innerText = "다음";	// a 태그의 텍스트 변경 
    
    // * 바꾼 속성값을 적용해 새 창으로 열리게 하고 싶을 때
    aEl.setAttribute("target", "_blank");
</script>

 


◉ 이벤트 다루기 

▪︎ 이벤트 

  - 웹 브라우저와 사용자 사이에 상호작용이 발생하는 특정 시점을 의미 

  - 이벤트가 발생하면, 이벤트 종류에 따라 어떤 작업을 하거나 미리 등록한 함수를 호출하는 등의 조작을 자바스크립트로 지정할 수 있음 

 


1. 이벤트 종류 

 

▪︎ 주요 이벤트 종류 

 


2. 이벤트 등록하기 

 

▪︎ 이벤트 등록 

  - 이벤트가 발생할 때 어떤 작업을 할지 자바스크립트 코드로 작성하는 것을 의미 

  - 이벤트 등록 방법은 크게 3가지로 구분됨 

     : 인라인, 프로퍼티 리스너, 이벤트 등록 메서드 

 

 

① 인라인 방식으로 이벤트 등록하기 

 - HTML 태그에 속성으로 이벤트를 등록하는 방법 

 - onclick 이벤트를 button 태그의 속성으로 사용함 

   속성 값으로는 이벤트가 실행할 때 실행될 함수를 지정함 

<body>
    <button onclick="clickEvent()">클릭</button>
    <script>
    	function clickEvent(){
        	alert("click");
        }
    </script>
</body>

 

 

 

② 프로퍼티 리스너 방식으로 이벤트 등록하기 

  - 프로퍼티 리스너(property listener) : 요소 노드에 직접 속성으로 이벤트를 등록하는 방법 

  - 버튼을 클릭했을 때 요소 노드에 등록된 이벤트 속성에 할당된 함수가 실행됨 

<button>클릭</button>
<script>
    const btnE1 = document.querySelector("button");
    btnE1.onclick = function(){
    	alert("click");
    }
</script>

 

  - ES6을 사용할 수 있는 개발 환경이라면, 코드를 화살표 함수로 작성해도 됨 

<button>클릭</button>
<script>
    const btnE1 = document.querySelector("button");
    btnE1.onclick = () => {
    	alert("arrow click");
    }
</script>

 

- 또는 함수를 별도로 정의하고 함수명을 이용해 이벤트와 연결할 수도 있음 

<button>클릭</button>
<script>
    const btnE1 = document.querySelector("button");
    btnE1.onclick = clickEvent;
    function clickEvent(){
    	alert("click");
    }
</script>

 

 

 

③ 이벤트 등록 메서드로 이벤트 등록하기 

  - DOM에서 제공하는 addEventListener() 메서드를 사용해 이벤트 등록 가능 

  - 세 가지 방법 중 가장 권장하는 방식 

<노드>.addEventListener("<이벤트 타입>", <이벤트 함수>);

 

<button>클릭</button>
<script>
    const btnE1 = document.querySelector("button");
    btnE1.addEventListener("click", function(){
    	alert("click");
    });
</script>

 

 - ES6 개발환경이라면, 이벤트 함수에 화살표 함수도 사용 가능 

<button>클릭</button>
<script>
    const btnE1 = document.querySelector("button");
    const clickEvent = () => {
    	alert("button Click");
    }
    btnE1.addEventListener("click", clickEvent);
</script>

 

※ 단, 함수 표현식으로 정의된 함수는 호이스팅에 의해 선언과 할당이 분리되므로, 

  참조하려는 함수가 addEventListener() 메서드보다 반드시 위에 작성되어야 함 

 

 

 

 

 

'프론트엔드 > Javascript' 카테고리의 다른 글

스프링 부트로 JSON 다루기 - Jackson / GSON  (0) 2023.08.17
JSON (2)  (0) 2023.08.17
JSON (1)  (0) 2023.08.16
JS - BOM / window 객체  (0) 2023.08.16
JS - 객체 / 표준 내장 객체  (0) 2023.08.16