본문 바로가기
Web 개발/JS

Javascript - CSS 선택자 선택

by hooni40 2021. 6. 24.
728x90
반응형

안녕하세요, 지난 시간까지 Javascript의 얕은 이론(?)을 정리하였고 이제부터 본격적으로 Web을 만드는데 필요한 HTML/CSS와의 연결에 대해서 정리하려 합니다. 오늘은 Javascript에서 CSS 선택자를 선택하는 방법을 정리해보겠습니다.

 

CSS의 선택자를 선택하기 위해서는 document객체의 내장 API들을 사용해야 합니다.

 

-. document.getElementById('id를 문자열로 표현') : id 속성을 이용하여 태그를 선택하고자 할 때 사용.

HTML 문서에 존재하지 않는 id값으로 태그를 선택하면 null이 리턴됩니다. 

 

-. document.getElementsByClassName('class를 문자열로 표현') : class 속성을 이용하여 태그를 선택하고자 할 때 사용.

같은 class를 가진 요소가 여려 개라면 전부 선택이 가능합니다. getElementsByClassName 메소드로 태그를 선택할 시 해당되는 클래스를 가진 각 요소가 HTMLCollection이라는 배열과 비슷한 유사 배열에 담기게 됩니다. 유사 배열이므로 배열이 가진 메소드는 사용이 불가능합니다. 배열의 인덱스 기능은 유지됩니다. 존재하지 않는 class값으로 태그를 선택하면 null이 아닌 빈 HTMLCollection이 됩니다.

 

<!DOCTYPE html>
<html lang="ko">
<head>
  <meta charset="UTF-8">
  <title>풋살 동아리</title>
</head>
<body>
  <h2 id="title">회원 명단</h2>
  <ul id="members">
    <li class="member">강영혼</li>
    <li class="member">박민황</li>
    <li class="member">김효중</li>
    <li class="member">최지운</li>
    <li class="member">손서욱</li>
    <li class="member">이일준</li>
    <li class="member">김소위</li>
  </ul>
  <script src="index.js"></script>
</body>
</html>

<!-- JS -->
const members = document.getElementsByClassName('member');

for (let i = 1; i < members.length; i++) {
  if (i % 2 == 0) {
    console.log(members[i]);
  }
}

// 짝수 인덱스의 member class 출력된다!
<li class="member">김효중</li>
<li class="member">손서욱</li>
<li class="member">김소위</li>

 

-. document.

querySelector

('#id or .class') : 하나의 요소를 선택하고자 할 때 사용. (하나의 요소를 선택하는 것이므로 id를 선택할 때 사용하는 게 좋다고 저는 생각합니다!) id를 선택하고자 할 때는 '#id 이름', class를 선택하고자 할 때는 '.class'를 사용합니다. 즉 querySelector('#ID')는 getElememtByID('ID')와 동일한 결과를 리턴합니다. querySelector 메소드를 활용할 때 class나 태그 이름처럼 여러 개의 요소가 존재하는 선택자를 쓰더라도 가장 첫 번째 요소 하나만 선택합니다. 존재하지 않는 요소를 선택할 경우 null을 리턴합니다.

 

여러 개의 요소를 선택할 때document.querySelectorAll('#id or .class')을 사용합니다. class와 비슷하게 NodeList라는 유사 배열에 각 요소들이 담기게 됩니다. getElememtsByClassName과 마찬가지로 존재하지 않는 요소를 선택할 경우 비어있는 NodeList가 리턴됩니다.

가장 많이 사용하는 것은 querySelector와 querySelectorAll이므로 두 개를 아래 예시를 통해 추가로 확인해보겠습니다.

// HTML 코드
<body>
  <h2 id="title">내 맘대로 프로그래밍 언어 순위!</h2>
  <ol id="list">
    <li id="javaScript" class="language">JavaScript</li>
    <li id="python" class="language">Python</li>
    <li id="java" class="language">Java</li>
    <li id="c" class="language">C</li>
    <li id="ruby" class="language">Ruby</li>
  </ol>
  <script src="index.js"></script>
</body>

//JS Code
//<li id="javaScript" class="language">JavaScript</li> 만 출력되게 하려면?
console.log(document.querySelector('#javaScript')) //querySelector 사용
console.log(document.querySelectorAll('language')[0]) //유사배열의 인덱스 속성을 사용
console.log(document.querySelector('.language')) // querySelector는 동일한 class가 여러개면 첫번째 것을 끌어온다
console.log(document.querySelector('#list li')) // #list 클래스 내부에서 첫번째 li이므로!

 

마치기 전에, 위에서 설명드린 유사 배열의 특징 및 웹에서 발생하는 이벤트에 대해 간단히 정리하려 합니다!

 

유사 배열 : 배열과 유사한 객체 (HTMLCollection, NodeList, DOMTokenList ...)

-. 인덱싱이 가능합니다.

-. length 프로퍼티가 있습니다.

-. 배열의 기본 메소드를 사용할 수 없습니다.

 

이벤트 : 웹 페이지에서 발생하는 대부분의 일(사건)들입니다. (스크롤, 클릭, 키보드 입력...)

-. 이벤트 핸들링 : 자바스크립트를 이용해 이벤트를 다루는 일

-. 이벤트 핸들러(이벤트 리스터) : 이벤트가 발생하였을 때 일어나야 하는 동작들을 표현한 코드

  이벤트 핸들러 등록하는 방법

  → 자바스크립트로 해당 DOM 객체의 onclick 프로퍼티에 등록하기

 

const btn = document.querySelector('#myBtn'); // btn을 찾는다

// btn.onclick = alert('Hello World!)로 하면 이벤트 발생할 때가 아니라 바로 호출된다 
// function()안에 넣어 click이 발생할때 호출되게 한다!
btn.onclick = function() {
  alert('Hello World!');
};

 

  → HTML 태그의 onclick 속성에 바로 표시 (비추천!)

728x90
반응형

'Web 개발 > JS' 카테고리의 다른 글

Javascript - innerHTML, outerHTML, textContent  (0) 2021.06.27
Javascript - DOM  (0) 2021.06.26
Javascript - array(Quiz)  (0) 2021.06.22
Javascript - array  (0) 2021.06.21
Javascript - class(1)  (0) 2021.06.19

댓글