728x90

<!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>Document</title>
</head>
<body>
    <h1 id="txt">
        <span>자바스크립트</span>
    </h1>
    <p class="txt2">p태그 데이터1</p>
    <p class="txt2">p태그 데이터2</p>
    <script>
        // DOM객체는 html문서를 태그, 속성, 컨텐츠를 따로따로 분리하는 객체
        // ex) <h1 id="txt">자바스크립트</h1> -> <h1>(태그), id(속성), txt(값),자바스크립트(컨텐츠)
        // 이유는? 특정요소에 접근하여 스타일, 기능을 부여하기 위해서

        // 실습 : id가 txt인 요소를 가지고온 다음에, 그 안의 컨텐츠를 출력
        // 1. 모든 html정보를 담고있는 최상위 객체에게 조회 요청 = document
        // 2. 명령문 작성(id가 txt인 요소를 가져와) = get(가져오다) + element(요소를) + byid(아이디)
        // dom객체에서 특정 요소를 접근하는 방법 : document.getElementBy구분자("값")
        let h1 = document.getElementById("txt");
        console.log("가지고온 요소 : ",h1);

        // 특정요소 안의 컨텐츠를 접근하려면 innerHTML,innerText
        // 차이점 : innerHTML(태그를 인식), innerText(태그를 인식하지 못한다)
        // h1태그는 DOM객체이고 객체는 Object 이므로 .innerHTML은 객체의 키값으로 해서 사용할 수 있다.
        let inhtml = h1.innerHTML;
        let intext = h1.innerText;
        console.log("html : ",inhtml);
        console.log("text : ",intext);
        
        // h1의 컨텐츠 값을 수정하고 싶다면?
        h1.innerHTML = "<p>변경한 데이터입니다!</p>"
        // 컨텐츠를 가지고 오는 경우에는 innerText
        // 컨텐츠를 수정하는 경우에는 innerHTML
        // 이유는 html은 태그를 인식하지만 Texdt는 인식하지 못하기 때문
        //console.log("변경한 데이터 : ",intext);
        //h1.innerText = "<p>텍스트로 변형한 데이터</p>" p태그 인식안됨

        // 실습 : class가 txt2인 요소들을 가지고 온 후, 컨텐츠를 출력
        // 복수개의 요소를 요청할때는 document.getElements
        // --> 복수개의 데이터를 가지고 오기 위해서 요청부터 s(복수개)를 요청
        // 리턴 받는 데이터 또한 배열형태의 데이터를 받는다.
        // htmlCollection객체(유사배열)이 리턴된다.
        // 실제 배열이 아니기 때문에 배열함수를 사용할 수 없다.(push,pop)
        // 인덱스와 길이는 사용이 가능하다.
        // 데이터를 조회할 때는 배열 형태이기 때문에 항상 인덱스를 사용해야 한다★
        let p = document.getElementsByClassName("txt2");
        console.log("p태그 : ",p)
        console.log("p태그 컨텐츠 : ",p[1].innerHTML);
        console.log("길이 :  ",p.length);
    </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>Document</title>
</head>
<body>
    <h1 id="txt">컨텐츠!!</h1>
    <button onclick="getText()">인라인버튼</button>
    <button id="btn_han">핸들러버튼</button>
    <button id="btn_lis">리스너버튼</button>
    <button id="btn_noname">익명함수버튼</button>
    <script>
        // 이벤트 : 특정 요소에게 기능(이벤트)를 연결시켜주는 기능
        // ex) click, dblclick, mouseover, mouseout
        // eventHandler vs eventListener
        // 1. 이벤트 핸들러
        //  - 하나의 이벤트만 부여할 수 있다.
        //  - html태그에 직접 작성, 이벤트 프로퍼티를 통해서 작성
        //  - 프로퍼티 : 키값(을 가리키는 주소값)
        // 2. 이벤트 리스너
        //  - 하나의 요소에 여러개의 이벤트를 부여할 수 있다.
        
        // 실습 : 버튼을 클릭 시, id가 txt인 요소의 컨텐츠 값을 출력(alert)하는 함수
        function getText() {
            let txt = document.getElementById("txt").innerText;
            alert(txt);
        }
        
        // 1) 이벤트 핸들러(html태그에 직접 작성하는 방법) -> 인라인 방식
        // <button onclick="getText()">인라인버튼</button>
        // 단점 : 이벤트를 하나만 처리, 함수명이 노출!
        // 사용예시 : <button onclick="alert('알림')">
        // 단순한 로직을 하나만 처리할때 사용, 주의점은 내장함수만 사용할 것
        
        // 2) 이벤트 핸들러(프로퍼티를 활용한 방법)
        // 2-1 = 이벤트를 부여할 요소를 수집
        // 2-2 = 수집된 요소에게 프로퍼티를 통해서 이벤트 할당(이벤트 바인딩)
        let btn_han = document.getElementById("btn_han");
        // 프로퍼티 : 객체의 키값이라고 생각하자!
        let btn = btn_han.onclick /// 비어있기 때문에 null이 출력
        console.log("클릭 프로퍼티 : ", btn);
        btn_han.onclick = getText; // 비어있는 onclick키값에 내가 만든 함수를 넣어준다
        // 주의점 : 함수를 넣을때는 (바인딩) 함수명만 기입한다. 즉()는 생략한다{()는 함수를 실행하기때문에 생략}
        
        // 3) 이벤트 리스너 방식
        // 장점 : 다중 이벤트 처리가 가능
        // 단점 : 코드가 길어진다
        // 1. 이벤트를 부여할 요소를 수집
        // 2. 요소에 이벤트를 할당(리스너 방식)
        let btn_lis = document.getElementById("btn_lis");
        btn_han.onclick = getText; // 핸들러방식
        btn_lis.addEventListener("click",getText); //리스너방식
        
        // 4) 익명함수(이름이 없는 함수)
        // 요소에 함수(기능)을 직접 작성하는 방법
        // 요소에게 유일한 이벤트를 부여할때 사용(특정 요소에서만 사용)
        let btn_noname = document.getElementById("btn_noname")
        btn_noname.addEventListener("click", function (){
            alert("익명함수입니다!");
        })
        
        //btn_noname.onclick = function(){
        //    alert("익명함수입니다!")
        //}
    </script>
</body>
</html>

 

728x90
복사했습니다!