HTML_CSS_JavaScript

Do it! HTML+CSS+자바스크립트 웹 표준의 정석 - ⑩

민주82 2023. 3. 15. 12:01

문서객체모델(DOM)

 

달리고 달려 도착한 책의 마지막 챕터 :)

 

 

 

웹에서 자바스크립스를 사용하는 이유는 어떤 조건에 맞거나 사용자의 동작이 있을 때 웹 문서 전체 또는 일부분이 동적으로 반응하게 하는 것

→ 웹 문서의 모든 요소를 따로 제어할 수 있어야 함

 

 

 

문서 객체 모델(DOM)

: 자바스크립트를 이용하여 웹 문서에 접근하고 제어할 수 있도록 객체를 사용해 웹 문서를 체계적으로 정리하는 방법

 

 

 

DOM을 구성하는 기본 원칙

  1. 모든 HTML 태그는 요소 노드입니다. 
  2. HTML 태그에서 사용하는 텍스트 내용은 자식 노드인 텍스트 노드입니다.
  3. HTML 태그에 있는 속성은 자식 노드인 속성 노드입니다.
  4. 주석은 주석 노드입니다.

 

 

 

DOM에 접근하기

 

getElementById(id) : id명으로 접근

getElementsByClassName(class) : 클래스 명으로 접근하며 여러 요소가 배열 형태로 저장됨

getElementsByTagName(tag) : 태그명으로 접근하며 여러 요소가 배열 형태로 저장됨

querySelector() : id명이나 선택자를 사용해 접근

querySelectorAll() : 클래스명이나 태그명의 선택자를 사용해 접근, 여러 노드가 노드리스 형태로 저장됨

 

 

 

속성 가져오기 및 수정하기

 

getAttribute(속성) 

: 태그해서 사용한 속성값을 가져옴

 

getAttribute(속성, 값)

: 태그의 속성을 특정한 값으로 지정

 

 

 

이벤트 처리하기

요소.addEventListener(이벤트, 함수, 캡쳐 여부)

 

 

CSS 속성에 접근하기

document.요소명.style.속성명

 

 

 

 

▽ 텍스트 노드를 사용하는 새로운 요소 추가하기

순서 매서드 설명
1 createElement() 새로운 요소 노드를 만듦
2 createTextNode() 새로운 텍스트 노드를 만듦
3 appendChild() 텍스트 노드를 요소 노드의 자식으로 연결
4 appendChild() 요소 노드를 DOM에 연결

 

 

 

 

▽ 속성값이 있는 새로운 요소 추가하기

순서 매서드 설명
1 createElement() 새로운 요소 노드를 추가
2 createAttribute() 새로운 속성 노드를 추가
3 속성값 지정하기 속성값을 프로퍼티로 지정
4 setAttributeNode() 속성 노드를 요소 노드의 자식으로 연결
5 appendChild() 요소 노드를 DOM에 연결

 

 

 

노드삭제

: parentNode 프로퍼티로 부모 노드를 찾아서 부모 노드에서 삭제

부모노드.removeChild(자식노드)

 

 

 

 

 

 

마무리 문제 ♥♡

 

 

 

1.  체크 표시를 누르면 항목 텍스트의 글자가 회색으로 바뀌면서 가로줄이 그려지는 소스를 작성하세요.

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>연습문제 1</title>
	<style>
		ul{
			list-style: none;
		}
		li {
			font-size:20px; 
			line-height: 35px;
		}
		.check {			
			color:#999;
			font-size:20px;
			margin-right:25px;
		}
	</style>
</head>
<body>
	<h1>할 일 목록</h1>
	<ul>
		<li><span class="check">&check;</span>할 일 1 </li>
		<li><span class="check">&check;</span>할 일 2 </li>
		<li><span class="check">&check;</span>할 일 3 </li>
		<li><span class="check">&check;</span>할 일 4 </li>
		<li><span class="check">&check;</span>할 일 5 </li>
	</ul>

	<script>
		var checks = document.querySelectorAll(".check");
		for(var i = 0; i < checks.length; i++) {
			checks[i].addEventListener("click", function() {
        this.style.color = "#ccc";
				this.parentNode.style.color = "#ccc";
				this.parentNode.style.textDecoration="line-through";
			});
		}
	</script>
</body>
</html>

 

 

 

 

 

2. 행과 열의 개수를 입력한 값에 따라 표를 그리는 소스를 작성하세요.

 

 

 

<!DOCTYPE html>
<html lang="ko">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>연습문제 2</title>
  <style>
    form {
      margin-bottom:30px;
    }
    input[type="text"] {
      width:30px;
      height:20px;
      text-align: center;
    }
    button {
      margin-left:10px;
    }
    table {
      width:300px;      
    }
    table, td {
      border:1px solid #ccc;
      border-collapse: collapse;
    }
    td {
      padding:10px;
    }
  </style>
</head>
<body>
  <form>
    <input type="text" id="rCount" value="1">행 
    <input type="text" id="cCount" value="1">열    
    <button onclick="drawTable(); return false;">작성</button>
  </form>
  <div id="contents"></div>

  <script>
    function drawTable() {
      var rCount = document.querySelector("#rCount").value;
      var cCount = document.querySelector("#cCount").value;

      var newTable = document.createElement("table");
      for(i = 0; i < rCount; i++) {
        var newRow = document.createElement("tr");
        for(j = 0; j < cCount; j++) {
          var newCell = document.createElement("td");
          var cellText = document.createTextNode(i + ", " + j);
          newCell.appendChild(cellText);
          newRow.appendChild(newCell);
        }
        newTable.appendChild(newRow);   
      }
      var contents = document.querySelector("#contents");
      contents.appendChild(newTable);
    }
  </script>
</body>
</html>