본문 바로가기
JS

HTML 태그 선택하기(querySelector)

by 학식러 2022. 7. 7.

document.querySelector('선택자')

 

document는 브라우저에서 제공해주는 객체여서 따로 선언을 하지 않고도 사용 가능

querySelector라는 메소드

선택자는 html태그를 선택할 수 있는 특수한 문자열

 

const $input = document.querySelector('input');

input태그를 선택해서 $input안에 저장한다는 의미

 

$붙인것은 변수명앞에 $ _ 같은것붙일 수 있음

자신만의 규칙: 태그를 변수에 넣을 때는 변수명 앞에 $를 붙인다. -> 변수만 보고도 이게 자바스크립트 값이 아니라 태그를 선택한 것이구나 라는 것을 쉽게 알 수 있다. 태그가 여러개면 $$ 두개.

 

 

태그 여러개를 선택할때 querySelectorAll

<button>입력</button>
<button>버튼2</button>
<button>버튼3</button>
<script>
  const $$buttons = document.querySelectorAll('button');
  console.log($$buttons);
</script>
</body>

</html>

 

버튼 3개를 다 선택하고 싶어서 querySelectorAll을 사용했다.

 

 

console에서 확인하면 [button, button, button] 이렇게 배열처럼 나오는데

NodeList처럼 (3) 앞에 무언가가 있으면 배열이 아니라 객체이다. 배열인척 하는 객체. 유사배열. 나중에 얘네들은 배열의 메소드나 속성을 쓸 수 없는 경우가 많아서 구별해줘야 한다.

진짜 배열은 아래에 [12,12,12] 처럼 (3)앞에 뭐가 없다.

arguments도 유사배열.

 

<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"></span></div>
<input type="text">

querySelector는 여러개중에 첫번째꺼만 선택하고 querySelectorAll은 다 선택함.

 

만약에 word 하나만 선택하고 싶다.

document.querySelector('span'); 으로 하면 그 중 첫번째인 order가 선택된다.

그래서 id가 있는 것임.

 

document.querySelector('#order');  //아이디가 word인 태그를 찾아라.

 

 

만약 버튼2, 버튼3만 선택하고 싶다.

<body>
<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"></span></div>
<input type="text">
<button>입력</button>
<button class="btn">버튼2</button>
<button class="btn">버튼3</button>
<script>
  const number = parseInt(prompt('몇 명이 참가하나요?'), 10);
  alert(number);
  const yesOrNo = confirm('맞나요?');

  document.querySelectorAll('.btn');

 

 

그러면 일단 2개 이상이니까 querySelectorAll을 사용해야한다.

 

그래서 공통된 것은 class가 btn 이므로 document.querySelectorAll을 한 후에 ('.btn')을 추가해주면 된다.

 

 

만약 그런데 입력, 버튼3을 선택하고 싶다.

 

그러면 2가지 방법이 있다.

 

1. 클래스를 옮긴다.

<body>
<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"></span></div>
<input type="text">
<button class="btn">입력</button>
<button>버튼2</button>
<button class="btn">버튼3</button>
<script>
  const number = parseInt(prompt('몇 명이 참가하나요?'), 10);
  alert(number);
  const yesOrNo = confirm('맞나요?');

  document.querySelectorAll('.btn');

 

이런식으로 선택하고 싶은 것을 같은 클래스로 만들어준다.

 

2. 클래스를 옮기고 싶지 않다면 할 수는 있는데 입문자에게 너무 복잡함.

=> 클래스를 하나 더 만든다.

 

<body>
<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"></span></div>
<input type="text">
<button class="target">입력</button>
<button class="btn">버튼2</button>
<button class="btn target">버튼3</button>
<script>
  const number = parseInt(prompt('몇 명이 참가하나요?'), 10);
  alert(number);
  const yesOrNo = confirm('맞나요?');

  document.querySelectorAll('.target');

 

target이라는 클래스를 하나 더 만들어서 querySelectorAll을 이용해 target을 선택해주면 된다.

 

다양한 방법 중에 주력으로 쓰는 한가지 방법을 만들기.

 

 

<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"></span></div>
<input type="text">
<button>입력</button>
<script>
  const $span = document.querySelector('div span');
  console.log($span);

const $span = document.querySelector('div span');

위 코드처럼 div 하고 한칸 띄어쓰기 후 다른 태그를 쓰는 경우도 있다. div span처럼.

태그랑 태그 사이에 공백이 있으면 자손태그를 의미한다.

그래서 위 태그는 div의 자손인 span을 찾아라 를 의미하게 된다.

 

자손과 자식의 차이점

자식은 바로 안에 들어있는것이 자식. div span

자손은 자식+손자+(후손)까지 포함. div span, div p(아래 코드)

 

<div><span id="order">1</span>번째 참가자</div>
<div>제시어: <span id="word"><p></p></span></div>
<input type="text">
<button>입력</button>
<script>
  const $span = document.querySelector('div p');
  console.log($span);

 

만약 span아래에 p도 있으면 이렇게 하면 div의 자손인 p를 찾게 된다.

 

만약 자식만 찾고싶다.

그러면 document.querySelector('div>span'); 이렇게 하면 된다.

의미는 div의 바로 자식인 span을 찾는다는 의미.

 

document.querySelector('선택자 내부선택자 내부선택자 ...'); ex) ('body #target button ...') 그런데 이렇게 선택자가 너무 길어질 바에 차라리 id를 주는것이 나음. id는 고유한 값이기 때문에 = 1개밖에 없기 때문에

 

퀴즈

a 태그 안에 id가 b인 태그 안에 class가 c인 태그를 선택하려면 어떤 선택자를 사용해야하나?

.

.

.

.

.

.

.

.

.

a #b .c

댓글