본문 바로가기
JavaScript

JavaScript(history, navigator, node, 문서객체모델/노드)

by code2772 2022. 11. 9.

[ 목차 ]

    728x90
    반응형

    ✔ history 객체
    - 브라우저의 히스토리 정보를 문서와 문서 상태 목록으로 저장하는 객체
    - 사용자의 개인 정보를 보호하기 위해 이 객체의 대부분의 접근 방법을 제한

    back() - 뒤로 이동
    forward)_ : 앞으로 이동
    go(0) : 새로고침
        location.reload() : 새로고침

     

    <!DOCTYPE html>
    <html lang="en">
    <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>history</title>

    </head>
    <body>
        <h2>history</h2>
        <button onclick="history.back()">뒤로</button>
        <!-- <button onclick="history.back(-2)">뒤로 2페이지 이동</button> -->
        <button onclick="history.forward()">앞으로</button>
        <button onclick="history.go(0)">새로고침</button>
    </body>
    </html>

    ✔ navigator 객체 - 내 위치를 알려쥬눈 역할 정도만 사용한다.
    브라우저 공급자 및 버전 정보등을 포함한 브라우저에 대한 정보를 저장하는 객체

    geolocation : GPS정보를 수신하는 프러퍼티

     

    <!DOCTYPE html>
    <html lang="en">
    <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>navigator</title>
        <script>
            const success = function(loc){
                console.log(loc.coords.latitude);
                console.log(loc.coords.longitude);
            }
            const fail = function(msg){
                console.log(msg.code);
            }

            navigator.geolocation.getCurrentPosition(success, fail);
            // 콜벡함수 getCurrentPosition에 해당하는 데이터가 있으면 스스로 가저오는 것이다. 성공하면 success 실패하면 fail에 데이터가 들어가게 된다. 앞이 성공 뒤가 실패를 알자.
            // interval과 timeout도 콜벡함수이다.

        </script>
    </head>
    <body>
        <h2>navigator</h2>
    </body>
    </html>

    ❗❗❗ 문서 객체 모델(Document Object Model)
    - HTML문서 또는 XML문서등을 접근하기 위한 일종의 인터페이스 역할
    - 문서내의 모든 요소를 정의하고 각각의 요소에 접근하는 방법을 제공

    ✔ document 객체
    - 웹 페이지 자체(body)를 의미하는 객체
    - 웹 페이지에 존재하는 HTML 요소에 접근하고자 할 때 반드시 document 객체로부터 시작

    ✔ getElementsByTagName() : 해당 태그 이름의 요소를 모두 선택 
    //html의 요소를 태그 네임에 따라 배열식으로 가저오겠다!!!!

    ✔ getElementById() : 해당 아이디의 요소를 선택
    // id는 한 문서에 하나만 있어야 한다. 그렇게 때문에 Element에 s가 붙지 않는다.

    ✔ getElementsByClassName() : 해당 클래스에 속한 요소를 모두 선택

    ✔ getElementsByName() : 해당 name 속성값을 가지는 요소를 모두 선택

    ✔ querySelectorAll() : 선택자로 선택되는 요소를 모두 선택, ()안은 css를 이용하여 요소를 선택하여 변화를 주거나 추가를 할 수 있다.
    (querySelector()) : 단수로

     

     

    <!DOCTYPE html>
    <html lang="en">
    <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>문서객체모델1</title>

    </head>
    <body>
        <h2>문서객체모델1</h2>
        <ul>
            <li name ="markup">HTML</li>
            <li>CSS</li>
            <li id = "javascript" class="js">JavaScript</li>
            <li class="js">jQuery</li>
            <li class = "backend">Apache</li>
            <li class="backend">Spring</li>
            <li id="nodejs" class="js">Node.js</li>
            <li id="react" class="js">React</li>
        </ul>
        <script >
            const tagName = document.getElementsByTagName('li');
            // 태그네임을 통해 모든 li태그가 있는것을 가저오는 기능을 하고있다.
            for(let i=0; i<tagName.length; i++){
                console.log(tagName[i]);
                tagName[i].style.color = 'gold';
                // js는 style을 통해 css와 동일하게 특징을 줄 수 있다.
            }
            console.log("------------------------------");

            const className = document.getElementsByClassName('js');
            for(let i =0; i<className.length; i++){
                console.log(className[i]);
                className[i].style.color = 'deeppink';
            }
            console.log("------------------------------");
           
            const id = document.getElementById('javascript');
            console.log(id);
            id.style.color = 'greenyellow'
            console.log("------------------------------");

            const name = document.getElementsByName('markup');
            for(let i =0; i<name.length; i++){
                console.log(name[i]);
                name[i].style.color = ' deepskyblue';
            }  console.log("------------------------------");

            const qs = document.querySelectorAll('li.backend')
                for(let i=0; i<qs.length; i++){
                    console.log(qs[i]);
                    qs[i].style.color = 'navy';
                }
           

        </script>
    </body>
    </html>
     
     
    <!DOCTYPE html>
    <html lang="en">
    <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>문서객체노드2</title>
        <script>
            window.onload = function(){
                const gnb = document.getElementById('gnb');
                console.log(gnb);

                console.log(gnb.parentNode);//div
                console.log(gnb.children[0]);//ul
                console.log(gnb.children[0].nextElementSibling);//null 형제노드 없음
                console.log(gnb.children[0].children[0]);// first
                console.log(gnb.children[0].firstChild); //#text 문서종류별로 전부 찾아온다 노드의 종류를 정해주지 않았기 때문이다. 공백에 있는 text를 가저온 것으로 생각을 하자 이런 문제를 없에기 위해서는 순서나 요소를 추가하자
                console.log(gnb.children[0].firstElementChild); // first, 이렇게 사용하는 습관을 가지자!!!

            }
            //onload 윈도우가 모두 로드되었다면 -> 전체 로드되었다면 이렇게 해줘!! 즉 하단에 있는 HTML을 전부 읽을 후에 처리한다고 생각하면 편하겠다!!!!!
        </script>
    </head>
    <body>
        <h2>문서객체노드2</h2>
        <div>
            <nav id="gnb">
                <ul>
                    <li class="first">내용1</li>
                    <li>내용2</li>
                    <li>내용3</li>
                </ul>
            </nav>
        </div>
       
    </body>
    </html>

    ✔ 노드(node)
    - HTML DOM은 노드라고 불리는 계층적 단위에 정보를 저장

    노드 종류
    - 문서노드 : 문서 전체를 나타내는 노드
    - 요소노드 : HTML 요소는 요소 노드, 속성 노드를 가질 수 있는 유일한 노드
    - 속성노드 : 속성은 모두 속성 노드이며, 요소 노드에 관한 정보를 가지고 있음
    - 텍스트 노드 : 텍스트는 모두 텍스트 노드
    - 주석노드 : 주석은 모두 주석 노드

    노드의 관계
    - parentNode : 부모 노드를 의미, 나를 감싸고 있는 부분
    - children : 자식노드
    - childNode : 자식 노드 리스트 
    - firstChild : 첫번째 자식 노드, 종류가 어떤건지 알 수 없다.
    - firstElementChild : 첫번째 자식 요소 노드, 종류 즉 태그를 알기 위해 사용한다.
    - lastChild : 마지막 자식 노드 , 종류가 어떤건지 알 수 없다.
    - nextSibling : 다음 형제 노드 , 종류가 어떤건지 알 수 없다.
    - preciousSibling : 이전 형제 노드


    ❗ 노드 메소드 - 자주 사용하는 내용

    노드 추가 
    - appendChild() : 새로운 노드를 해당 노드의 자식 노드 리스트 맨 마지막에 추가
    - insertBefore() : 새로운 노드를 특정 자식 노드 바로 앞에 추가
    - insertDate() : 새로운 노드를 텍스트 데이터로 추가

    노드 생성
    - createElement() : 새로운 요소 노드를 만듬
    - createAttribute() : 새로운 속성 노드를 만듬
    - createTextNode() : 새로운 텍스트 노드를 만듬

    노드 제거
    - removeChild() : 자식 노드 리스트에서 특정 자식 노드를 제거, 노드가 제거되면 해당 노드를 반환. 노드가 제거될 때 노드의 자식들도 다같이 제거
    - removeAttribute() : 특정 속성 노드를 제거

    노드 복제
    - cloneNode() : 기존의 존재하는 노드롸 동일한 새로운 노드를 생성하여 반환

    노드 교체
    - replaceChild() : 기존의 요소 노드를 새로운 요소 노드로 교체
    - repaceData() : 텍스트 노드의 텍스트 데이터를 교체

    <!DOCTYPE html>
    <html lang="en">
    <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>문서객체노드2</title>
        <script>
            window.onload = function(){
                const gnb = document.getElementById('gnb');
                console.log(gnb);

                console.log(gnb.parentNode);//div
                console.log(gnb.children[0]);//ul
                console.log(gnb.children[0].nextElementSibling);//null 형제노드 없음
                console.log(gnb.children[0].children[0]);// first
                console.log(gnb.children[0].firstChild); //#text 문서종류별로 전부 찾아온다 노드의 종류를 정해주지 않았기 때문이다. 공백에 있는 text를 가저온 것으로 생각을 하자 이런 문제를 없에기 위해서는 순서나 요소를 추가하자
                console.log(gnb.children[0].firstElementChild); // first, 이렇게 사용하는 습관을 가지자!!!

            }
            //onload 윈도우가 모두 로드되었다면 -> 전체 로드되었다면 이렇게 해줘!! 즉 하단에 있는 HTML을 전부 읽을 후에 처리한다고 생각하면 편하겠다!!!!!
        </script>
    </head>
    <body>
        <h2>문서객체노드2</h2>
        <div>
            <nav id="gnb">
                <ul>
                    <li class="first">내용1</li>
                    <li>내용2</li>
                    <li>내용3</li>
                </ul>
            </nav>
        </div>
       
    </body>
    </html>

    반응형