2021.10.07, JavaScript , 09_DOM

2021.10.07, JavaScript , 09_DOM

함수 이름 없이 자바스크립트를 실행하라

body에서 호출이 안되고 자바스크립트에서 호출이 될 때 사용

09_DOM

Ex01

Insert title here /* DOM(Document Object Model : 문서 객체 모델) - 웹 화면에 보이는 요소를 조작하기 위한 기능으로 가득찬 라이브러리 덩어리. - DOM은 웹 페이지가 HTML 페이지를 인식하는 방식을 말함. - 웹 브라우저가 HTML 페이지에 접근하는 방법을 정의한 API임. - DOM에서 제공하는 일반적인 기능을 여러가지 기능을 여러 개의 DOM 객체로 나눠 구성되어 있음. - DOM은 정의부분(명세서)과 구현 부분으로 나뉘어져 있음. 정의부분인 명세서에서는 웹 페이지 문서를 조작할 때 지켜야 할 약속(규칙,규약)이 명시되어 있는 문서일뿐 실제 동작하는 구현 소스코드는 전혀 존재하지 않음. 텅 빈 상자와도 같음. 그리고 이 명세서를 만드는 곳이 바로 웹 관련 표준을 정의하는 협회인 W3C임. 구현 부분은 바로 브라우저 내부에 존재함. - 브라우저 제작사(IE, Chrome, Firefox, Safari 등등)는 DOM에 명시되어 있는 인터페이스에 맞춰 자신들만의 특화된 고유 기술을 이용해 독자적으로 기능을 구현함. - 눈에 보이지 않지만 사실 브라우저에 출력된 웹 페이지는 온통 DOM 객체로 구성되어 있음. - DOM 객체 텍스트와 이미지, 하이퍼링크, 폼 엘리먼트 등의 각 문서 엘리먼트를 나타냄. - 자바스크립트 코드에서 동적이 HTML을 만들어내기 위해 DOM 객체에 접근하여 조작을 할 수 있음. - 문서 객체 : 자바스크립트에서 이용할 수 있는 객체 * 노드 : - HTML 웹 페이지 구성 요소의 가장 작은 단위를 말함. - 문서를 이루는 모든 요소를 통합해서 부르는 용어. 즉, HTML 페이지의 각 요소(태그)들, 주석도 노드에 속함. - 브라우저는 이런 노드로 가득찬 웹 페이지를 읽어들여 해석한 후, 각 노드에 접근해 제어할 수 있는 DOM 객체를 생성함. * 요소(element) : <시작태그>텍스트 * 텍스트 노드 : 요소 안에 있는 글자. innerHTML과 관계가 있음. - 노드, 스타일, 속성, 이벤트, 위치 및 크기들을 다룰 수 있는 다양한 기능이 포함되어 있음. - DOM 객체가 생성된는 순서를 자세히 살펴 보면, 웹 브라우저는 가장 먼저 최상위에 해당하는 HTMLDocument 클래스의 객체를 생성함. 이후에 생성되는 모든 DOM 객체는 HTMLDocument 객체의 자식 객체로 만들어짐. - 보통 DOM 방식은 트리 구조임. 브라우저가 웹페이지를 처리하는 과정을 살펴보면 먼저 브라우저는 문서 정보에 쉽게 접근하고 조작하고자 HTML 웹 페이지를 읽은 후 파싱 단계를 거침. 이 후 DOM 객체로 변환 (트리구조 ) 후 화면에 출력을 함. - 예를 들어 웹페이지에 태그 노드가 있다면 브라우저에 의해 HTMLImageElement라는 DOM 객체가 생성이 됨. 이 객체는 다른 DOM객체와는 다르게 이미지를 읽어 들이는 특별한 기능이 있어서 실행 시에 "test.jpg" 라는 외부 이미지 파일을 읽어 들이게 됨. 즉, 문서 상의 노드는 "브라우저이군. 이 노드를 보고 알맞은 DOM 객체를 생성해 주세요" 라는 의미일 뿐, 모든 작업은 이제 브라우저에서 만들어낸 DOM 객체로 처리를 하게 됨. */ /* 브라우저가 웹 페이지를 처리하는 과정 1. 웹페이지 읽기 - 먼저 브라우저는 HTML 페이지를 읽음. 2. 파싱 단계 - 이어서 파싱(parsing) 단계를 거쳐서 웹 페이지 내용을 해석하게 됨. 이때 작성한 마크업 태그와 1:1 매칭이 되는 DOM 클래스 객체를 생성하게 됨. 이렇게 생성된 객체는 저마다 고유한 기능을 하게 됨. - 좀 더 자세하게 설명을 한다면 웹 브라우저가 HTML 페이지를 읽은 후 파싱 단계에서

태그를 만나게 된다면 HTMLDivElement라는 클래스의 인스턴스(객체)를 생성하게 되고, 태그를 만나면 HTMLImgElement하는 클래스의 인스턴스를 생성하게 된다는 의미임. 3. 출력 - 마지막으로 웹 브라우저는 생성한 DOM 객체를 가지고 우리가 보고 있는 웹페이지 화면을 만들게 됨. */

09_DOM

Ex02

Insert title here /* DOM을 공부하면서 알아야 할 내용 1. 노드 다루기 - 문서에서 특정 태그 이름을 지닌 노드 찾기 - 특정 노드의 자식 노드에서 특정 태그 이름을 지닌 노드 찾기 - 문서에서 특정 클래스가 적용된 노드 찾기 - 문서에서 특정 id를 가진 노드 찾기 - 자식 노드 찾기 - 부모 노드 찾기 - 형제 노드 찾기 - document.createElemet() 메서드를 사용해서 노드 생성 및 추가하기 - HTMLElement.innerHTML 프로퍼티를 사용해서 노드 생성 및 추가하기 - Node.cloneNode() 메서드를 이용해서 노드 생성 및 추가하기 - 노드 삭제하기 - 노드 이동시키기 - 텍스트 노드 생성 및 추가하기 - 텍스트 노드 내용 변경하기 2. 스타일 다루기 - 스타일 속성값 구하기 - 스타일 속성값 설정하기 - 스타일 속성 제거하기 3. 속성 다루기 - 속성값 구하기 - 속성값 설정하기 - 속성값 제거하기 4. 이벤트 다루기 - 이벤트 리스너 추가하기 - 이벤트 리스너 삭제하기 - 이벤트 발생시키기 - 사용자 정의 이벤트 만들기 */ HEADER

09_DOM

Ex03

Insert title here // 현재 문서의 body 부분을 읽고 난 후에 자바스크립트를 실행하라는 의미. window.onload = function() { // 요소(태그)를 생성하는 방법 // 형식) createElement(tagName); // 형식) creatrTextNode(text) : 텍스트 노드를 생성하는 메서드. let h1_element = document.createElement("h1"); let textNode = document.createTextNode("Hello... DOM"); // 텍스트노드를 h1태그에 자식노드로 추가 h1_element.appendChild(textNode); document.body.appendChild(h1_element); }

09_DOM

Ex04

Insert title here window.onload = function() { // 이미지 태그를 만들어 보자. let img_element = document.createElement("img"); // 이미지 태그에 이미지를 넣기 위해서는 src 속성이 지정되어야 함. img_element.src="../images/mango.jpg"; img_element.width= "200"; img_element.height= "200"; // 해당 이미지 노드를 문서의 본문(body)에 추가해 주어야한다. document.body.appendChild(img_element); }

09_DOM

Ex05

Insert title here onload = function() { let img_element = document.createElement("img"); // 속성을 지정하는 방법 // setAttribute(name, value) : 속성을 지정하는 메서드. img_element.setAttribute("src", "../images/apple.jpg"); img_element.setAttribute("width","200"); img_element.setAttribute("height","200"); document.body.appendChild(img_element); }

09_DOM

Ex06

Insert title here onload = function() { // 문서의 요소를 찾는 방법 - 3가지 // 1. getElementById(id이름): 문서에서 특정 id를 가진 노드 찾기 let header1 = document.getElementById("header_1"); let header2 = document.getElementById("header_2"); // 문서 객체 속성을 변경하는 header1.innerHTML="header_1 id를 가진 요소"; header2.innerHTML="header_2 id를 가진 요소"; } Header1 Header2

09_DOM

Ex07

Insert title here onload = function() { // 문서의 요소를 찾는 방법 - 3가지 // 2. getElementsBytagName(tagName)을 이용하는 방법 // ==> tagName과 일치하는 요소를 배열로 가져오는 매서드. let headers = document.getElementsByTagName("h1"); //headers[0].innerHTML = "getElementsByTagName()"; //headers[1].innerHTML = "getElementsByTagName()"; for(let i=0; i

09_DOM

Ex08

Insert title here onload = function() { // 문서의 요소를 찾는 방법 - 3가지 // 3. querySelector(선택자)를 이용하는 방법 // 3-1. querySelector(산택자) // ==> 가장 처음 선택되는 문서의 선택자 요소를 가져오는 메서드. // 3-2. querySelectorAll(선택자) // ==> 문서의 선택자 요소 전체를 배열로 가져오는 메서드. let header1 = document.querySelector("#header_1"); let header2 = document.querySelector("#header_2") header1.innerHTML ="header_1 id를 가진 요소"; header2.innerHTML ="header_2 id를 가진 요소"; } Header1 Header2

09_DOM

Ex09

Insert title here onload = function() { let header = document.getElementByID("header"); // h1 태그의 문서의 요소를 바꾸어 보자. header.style.border = "1px solid red"; header.style.color = "blue"; header.style.fontStyle = "italic"; header.innerHTML ="방가방가"; } Header

09_DOM

Ex10

Insert title here onload = function() { let header2 = document.getElementById("header_2"); // 특정 요소(태그)를 삭제하는 방법. document.body.removeChild(header2) } Header1 Header2

09_DOM

Ex11

Insert title here onload = function() { let imageNode = document.getElementById("apple"); document.body.removeChild(imageNode); } 사과이미지

09_DOM

Ex12

Insert title here onload = function() { let header = document.getElementById("header"); // 이벤트 처리 작업 header.onclick = function() { alert("글자를 클릭하셨군요!!!"); header.innerHTML = "글자 변경"; } } HEADER

09_DOM

Ex13

Insert title here onload = function() { document.getElementById("btnChannel1").onclick = function() { let myDiv = document.getElementById("myDiv"); myDiv.style.backgroundColor = "yellow"; myDiv.style.width = "100px"; document.getElementById("str").style.color = "red"; } } function go_change() { alert("이벤트 예제입니다."); } 안녕하세요!!!

09_DOM

Ex14

Insert title here onload = function() { let text = document.getElementById("class") text.onclick = function() { text.style.color ="red"; text.innerHTML ="페이지가 변경되었습니다."; } } 이것이 div 요소입니다.

09_DOM

Ex15

Insert title here onload = function() { let p_element = document.createElement("p"); let p_textNode = document.createTextNode("DOM을 이용한 p 태그"); p_element.appendChild(p_textNode); let hr_element = document.createElement("hr"); //


태그에 title 속성을 추가하는 방법 hr_element.setAttribute("title","DOM을 이용한 수평선"); document.body.appendChild(p_element); document.body.appendChild(hr_element); }

09_DOM

Ex16

Insert title here onload = function() { // 1.

태그를 만들어야 한다. let p_element =document.createElement("p"); // 2.

태그 안에 들어갈 텍스트 노드를 만들어야 한다. let textNode = document.createTextNode("안녕하세요"); // 3. 텍스트 노드를

태그에 자식 노드로 추가해 주어야 한다. p_element.appendChild(textNode); // 4.

태그에 자식 노드로

태그를 추가해 주어야 한다. let myDiv = document.getElementById("myDiv"); myDiv.appendChild(p_element); myDiv.style.color ="blue"; }

09_DOM

Ex17

Insert title here onload = function() { let button = document.getElemetById("btn"); button.onclick = function() { let text = document.getElementById("text1").value; if(text == "") { alert("내용을 입력하세요~~~"); }else { document.getElementById("text2").value=text; } } } [문제] 버튼을 클릭하면 첫번째 텍스트 창에 입력된 내용을 두번째 텍스트 창으로 복사를 해 보자 vvvvvvvv

09_DOM

Ex18

Insert title here // 일정한 시간마다 주기적으로 특정한 함수를 호출 //setInterval(호출할 함수 이름, 시간) let id; // 전역 변수 function change_go() { id = setInterval(flashText, 1000); } function flashText() { let target = document.getElementById("target"); target.style.color = (target.style.color == "red") ? "blue" : "red"; } function stop_go() { clearInterval(id); } 여기는 텍스트 영역입니다.

09_DOM

Ex19

Insert title here function check() { let userId = document.getElementById("id"); let userPwd = document.getElementById("pwd"); //let userName = document.getElementById("name"); //let userPhone = document.getElementById("phone"); //let userAddr = document.getElementById("addr"); // 아이디 입력 창 입력 여부 if(userId.value == "") { alert("아이디를 입력해 주세요."); document.getElementById("id").focus(); return false; // 데이터 전송이 차단됨. } // 비밀번호 입력 창 입력 여부 if(userPwd.value == "") { alert("비밀번호를 입력해 주세요."); document.getElementById("pwd").focus(); return false; //데이터 전송이 차단됨. } // 이름 입력 창 입력 여부 if(document.getElementById("name").value == "") { alert("이름을 입력해 주세요."); document.getElementById("name").focus(); return false; } // 연락처 입력창 입력 여부 if(document.getElementById("phone").value == "") { alert("연락처를 입력해 주세요."); document.getElementById("phone").focus(); return false; } // 주소 입력 창 입력 여부 if(document.getElementById("addr").value=="") { alert("주소를 입력하세요"); document.getElementById("adde").focus(); return false; } } 아이디 비밀번호 이름 연락처 주소

from http://saltedcaramel.tistory.com/51 by ccl(A) rewrite - 2021-10-08 01:26:43