JavaScript

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

code2772 2022. 11. 9. 09:02
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>

반응형