판봉 개발 일기

[02]Browser[document] - javascript 본문

JAVA 웹개발 과정

[02]Browser[document] - javascript

판봉 2021. 8. 12. 18:28
728x90

Selector

이번에는 browser의 selector 즉 선택자에 대해서 알아볼겁니다.

저번시간에 배웠던 것을 이용하면 가까기에 붙어있는 요소들만 접근 할 수 있었습니다.

하지만 언제나 그렇지는 않습니다.

웹 페이지 내에서 원하는 요소 노드에 대해 바로 접근하는 방법이 있습니다.

바로 getElemenet와 querySelector입니다.

<html>
  <body>
    <div id="elem">
      <div id="elem-content">Element</div>
    </div>
    <script>
      // 요소 얻기

      // document.getElementById('id값');
      // 해당 id를 가지는 요소를 선택함

      // 변수에 대입 -> 해당 요소의 자바스크립트 이름을 짓는다고 생각
      let elem = document.getElementById("elem");
      console.log(elem);
      elem.style.background = "red";

      // document.getElementById("elem").style.background = 'red'; //  일반적인 엘리먼트의 속성들은 자동완성이 됨
    </script>
  </body>
</html>

요소에 id 속성이 있다면 위치에 상관없이 저 메서드를 이용하여 접근 할 수 있습니다.

 

하지만 선생님께선 저것 말고 두번째로 말씀드린  querySelector를 이용하라고 하십니다.

querySelector에는 크게 2가지가 있습니다.

바로 말 그대로 "querySelector"와 "querySelectorAll"이죠

이 두가지의 차이점은 단어에서 유추할수 있듯이 여러분들이 생각하시는 그게 맞습니다.

 

👇👇(참고 코드)(접었다가 펼수있음)

더보기

<html>

  <body>    

    <div>영역</div>

    <div>영역2</div>

      <ul id="list">

        <li>1-1</li>

        <li>1-2</li>

      </ul>

      <ul>

        <li class="item">2-1</li>

        <li class="item">2-2</li>

      </ul>

      <ol>

        <li>3-1</li>

        <li>3-2</li>

      </ol>

      <input type="text"<!--입력박스-->

      <input type="checkbox"><!--체크박스-->

 

      <script>

        // let obj = {

        //   name: "john",

        //   phone: {

        //     home: "02---",

        //     org:"032",

        //   }

        // }

 

        // obj.phone

 

        // 상위요소.querySelector("CSS선택자"); // 첫번째를 선택

        // 상위요소.querySelectorAll("CSS선택자") // 여러개를 선택

 

        // document에 하위 요소중 태그가 'div'인 요소를 선택

        // 해당 요소중 첫번째 요소를 선택

        const div = document.querySelector("div");

        // console.log(div);

 

        // document에 하위 요소중 태그가 'div'인 요소를 모두 선택

        const divList = document.querySelectorAll("div");

        // console.log(divList)

 

       

 

        /*-------------같은 요소들을 선택함------------------------*/

        // id가 list인 요소의 li태그 자식들

        const liList1=document.querySelector("#list>li");

        console.log(liList1);

 

          

        // #id선택자

        const ul = document.querySelector("#list");

        // console.log(ul);

 

        // 요소(document외에도 올 수 있음).querySelector

        const liList2 = ul.querySelectorAll("li");

        console.log(liList2);

        /*-----------------------------------------------------*/

 

        // class선택자

        const liList = document.querySelectorAll(".item")

        // console.log(liList);

 

        // 후손/자손 선택자

        const olLiList = document.querySelectorAll("ol>li");

        // console.log(olLiList);

 

        // pseudo class(의사 클래스)

        const liFirst = document.querySelectorAll("ol>li:first-child");

        // console.log(liFirst);

 

        // // pseudo element(의사요소) 방법이 코드를 짜야해서 이거는 나중에 합시당 어려움

        // const before = liFirst.querySelector("::before");

        // console.log(before);

 

        // 속성선택자(attribute selector)

        // 태그[속성명=속성값] -> 해당 태그에 해당 속성이 있는 요소를 선택

        const text = document.querySelector('input[type="text"]');

        const chk = document.querySelector('input[type="checkbox"]');

        console.log(text);

        console.log(chk);




      </script>

    </li>

  </body>

</html>



쿼리

그리고 CSS에서 했던것과 마찬가지로 자식태그나 후손 태그들을 사용할 수도있죠

 

자식 태그

그리고 클래스 선택자, 의사 클래스 도 있습니다.

클래스

그리고 좀 특이한 것으로 속성선택자(attribute selector)가 있는데

이것은 태그[속성명=속성값]으로 찾습니다.

속성선택자


예제

만약에 이런 문제가 있따면 어떻게 풀까요?

문제설명

https://ko.javascript.info/task/find-elements/table.html

 

https://ko.javascript.info/task/find-elements/table.html

 

ko.javascript.info

해당 링크를 올려드렸으니 개발자 툴에서 확인하여 코드를 작성해보세요

참고로 저는 마지막 쪽에서 막혔었는데 정답을 보니까 뭔가 허탈하더라구요

정답은 밑에 있습니다.(참고로 querySelector만 써야합니다!)

👇👇👇👇👇👇👇😁😁😁👇👇👇

더보기

.

<html>

  <body>

    <form name="search">

      <label

        >Search the site:

        <input type="text" name="search" />

      </label>

      <input type="submit" value="Search!" />

    </form>

 

    <hr />

 

    <form name="search-person">

      Search the visitors:

      <table id="age-table">

        <tr>

          <td>Age:</td>

          <td id="age-list">

            <label>

              <input type="radio" name="age" value="young" />less than 18</label

            >

            <label>

              <input type="radio" name="age" value="mature" />18-50</label

            >

            <label>

              <input type="radio" name="age" value="senior" />more than

              50</label

            >

          </td>

        </tr>

 

        <tr>

          <td>Additionally:</td>

          <td>

            <input type="text" name="info[0]" />

            <input type="text" name="info[1]" />

            <input type="text" name="info[2]" />

          </td>

        </tr>

      </table>

 

      <input type="submit" value="Search!" />

    </form>

    <script>

      // id = "age-table"인 테이블 찾기

      const table = document.querySelector("#age-table");

      console.log(table);

 

      // 테이블 내의 label 요소 모두 (총 3개)

      const label = table.querySelectorAll("label");

      console.log(label);

 

      // 테이블 내의 첫번째 td(Age가 적힌곳)

      const td = table.querySelector("td");

      console.log(td);

 

      // name="search"인 form 선택

 

      const form = document.querySelector(`form[name="search"]`);

      console.log(form);

 

      // 폼의 첫번째 input

      // 2개의 폼을 선택

      const forms = document.querySelectorAll("form");

      console.log(forms);

 

      // 첫번째 input만 배열에 넣음

      const firstInputs = [];

      for (let form of forms) {

        firstInputs.push(form.querySelector("input"));

      }

 

      console.log(firstInputs);

 

      // 폼의 마지막 input

      const lastInputs = [];

      for (let form of forms) {

        // 각 폼에 있는 전체 input 목록

        const inputs = form.querySelectorAll("input");

        // 거기서 마지막 것만

        lastInputs.push(inputs[inputs.length - 1]);

      }

      console.log(lastInputs);

    </script>

  </body>

</html>

 

이번 시간까지 browser에서 javascript로 특정 요소에 선택을 바로 하는법을 배웠습니다.

다음시간에는 dom의 노드에 대해서 알아보겠습니다.