본문 바로가기

클라이언트/JavaScript
HTML 속성 제어(태그 조작)

// HTML 속성 제어하기
    - CSS: 선택자 > 태그 검색 > 접근 > 서식 조작
    - JavaScript: 검색 도구 > 태그 검색 > 접근 > 태그 조작
        - HTML 계층 구조를 활용하여 탐색
            1. BOM        
            2. DOM
        
    1. HTML 태그 대부분의 속성은 JavaScript의 프로퍼티로 제공된다.
        - HTML : <input type="text" size="10">
        - JavaScript : txt1.size
        
    2. HTML 태그의 속성명을 그대로 JavaScript 프로퍼티명으로 사용한다.
    
    3. 대부분 읽기/쓰기 모두 지원한다. (일부 쓰기 or 읽기 전용이 있긴 하다.)
    
    4. 태그의 식별자나 근본적인 속상은 조작하지 않는다.
    
    5. 플래그 타입의 속성은 boolean으로 조작한다.
    
    6. HTML 속성명이 복합어면 캐멀표기법으로 작성한다.
    
    7. 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>JavaScript로 HTML 태그의 속성을 제어하기</h1>
    
    <form name="form1">
        <input type="text" name="txt1">
        <input type="button" value="확인" name="btn1">
    </form>
    
    <script>
        
        var txt1 = window.document.form1.txt1;
        var btn1 = window.document.form1.btn1;
        
        btn1.onclick = m1;
        
        function m1() {
            
            window.document.body.bgColor = 'gold';
            
        }
        
    </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>JavaScript로 HTML 태그의 속성을 제어하기</h1>
    
    <form name="form1">
        <input type="text" name="txt1">
        <input type="button" value="확인" name="btn1">
        <hr>        
        <input type="button" value="끄기" name="btn2">
    </form>
    
    <script>
        
        var txt1 = window.document.form1.txt1;
        var btn1 = window.document.form1.btn1;
        var btn2 = window.document.form1.btn2;
        
        btn2.onclick = m2;
        
        function m2() {
            
            if(window.document.body.bgColor != 'black') {
                window.document.body.bgColor = 'black';
                btn2.value = '켜기';
            } else {
                window.document.body.bgColor = 'white';
                btn2.value = '끄기';
            }
            
        }
        
    </script>
    
</body>
</html>


※ 하나의 버튼(스위치) > On/Off > 토글 버튼(Toggle Button)


// BOM, Browser Object Model > 비오엠
    - 초창기 모델
    - 현재까지 계속 사용
    - 선택적 모델 > 일부 태그만 관리 > 일부 태그만 조작 가능 > 빠진 태그는 조작 불가능
    - 이미지, 링크, 폼 태그 이외에는 조작이 불필요하다고 판단        
    - 태그의 name을 사용해서 접근한다.
    - id, class는 인식하지 못 한다.
    - HTML 태그의 속성만 조작 가능하다. > HTML RGB 16진수만 지원
    
    - 예약어
        ~ window: 창
            ~~ window.close(): 창을 닫아준다.
        ~ document: 문서 객체


// DOM, Document Object Model > 돔
    - BOM을 개선한 모델
    - 현재까지 계속 사용(주력)
    - BOM 기반 + 기능 추가 
    - DOM > BOM 확장 > DOM의 모든 기능을 BOM의 document 내부에 구현해놨다.
    - 모든 태그를 인식 > 모든 태그 조작 가능
    - name, id, class 모두 인식할 수 있다.(name 비권장)
    - 버전이 있다. (DOM Level 1 > DOM Level 2 > DOM Level 3)
        ~ DOM Level 0: BOM을 일컫기도 한다.

    - 태그 검색
        1. id 검색          > document.getElementById('id')
        2. class 검색       > document.getElementByClassName('id')
        3. name 검색        > document.getElementByName('id')
        4. 태그명 검색       > document.getElementByTagName('id')
        5. CSS 선택자 검색   > document.querySelector('selector')
                              document.querySelectorAll('selector')

    - DOM 트리 구성 요소(노드): 태그뿐만 아니라 다른 요소들도 포함
        1. 태그(1)
        2. 속성(2)
        3. PCDATA(3)
        4. 주석(8)
        5. 선언문(13)

    - DOM 트리 구성 노드의 프로퍼티 
        1. nodeType > 해당 노드가 어떤 형식인지 > 열거형(숫자)
        2. nodeName > 태그(태그명), 속성(속성명), PCDATA(#text)
        3. nodeValue > 태그(null), 속성(속성값), PCDATA(문자열)


// 특정 포인트에 겹쳐 있는 모든 태그 정보 알아내기
        ~ document.elementsFromPoint
        ~ document.elementFromPoints


<!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>
    <link rel="stylesheet" href="css/example.css">
    <style>

        #cat2 {
            position: absolute;
            left: 100px;
            top: 100px;
        }

        #cat3 {
            position: absolute;
            left: 50px;
            top: 150px;
        }
    
    </style>
</head>
<body>

    <img src="images/cat01.jpg" id="cat1"> 
    <img src="images/cat02.jpg" id="cat2"> 
    <img src="images/cat03.jpg" id="cat3"> 

    <script>

        window.onmousedown = function() {
            let x = event.clientX;
            let y = event.clientY;

            //특정포인트에 겹쳐있는 모든 태그>
            // document.elementsFromPoint
            // document.elementFromPoints

            console.log(document.elementsFromPoint(x,y));
        }
    
    </script>

</body>
</html>