2020년 12월 09일

업데이트:


객체

생성자 함수

    <h3>생성자 함수</h3>
    <pre>
    - 객체를 생성할 때 사용하는 함수. 

    - 일반적인 함수와 다르게 호출 시 new 키워드를 사용하며
      호출 결과로 객체가 생성됨.
    
    - 생성자 함수 사용 시 동일한 속성, 메소드를 지닌 객체 다수 생성 가능
    </pre>

    <button type="button" id="btn1">확인하기</button>
    <div id="arae1" class="area"></div>
    <script>
        // 생성자 함수 정의
        // 생성자 함수 작성 시 함수명의 첫 글자는 대문자여야 한다.
        function Student(name, java, db, html5, css3, js){
            //속성 정의
            // 객체 내의 속성에 접근하기 위해서는 this 참조변수 사용
            this.name = name;
            this.java = java;
            this.db = db;
            this.html5 = html5;
            this.css3 = css3;
            this.js = js;

            //메소드 정의
            this.getSum = function() {
                return this.java+this.db+this.html5+this.css3+this.js;
            }

            // 오버라이딩도 가능함
            this.toString = function() {
                return this.name + " / " + this.java + " / " + this.db  
                    + " / " +  this.html5 + " / " + this.css3 + " / " + this.js;

            }
        }

        // btn1 버튼이 클릭된 경우
        document.getElementById("btn1").onclick = function() {
            var std1 = new Student("홍길동", 50, 60, 70, 80, 90);
            var std2 = new Student("김영희", 60, 70, 80, 90, 100);
            
            document.getElementById("arae1").innerHTML
              = std1 + " / 합계 : " + std1.getSum()  +"<br>";
            document.getElementById("arae1").innerHTML 
                += std2 + " / 합계 : " + std2.getSum()  +"<br>";
        }
    </script>


객체 배열

    <h3>객체 배열</h3>
    <button type="button" id="btn2">확인하기</button>
    <div id="area2" class="area"></div>
    <script>
        document.getElementById("btn2").onclick = function() {
            
            // 빈 배열 선언
            var students = new Array();

            // 배열 마지막에 Student 객체를 추가
            students.push(new Student("홍길동", 50, 60, 70, 80, 90));
            students.push(new Student("고길동", 40, 63, 45, 43, 50));
            students.push(new Student("홍길순", 100, 68, 78, 45, 84));
            students.push(new Student("박철수", 55, 64, 79, 30, 94));
            students.push(new Student("김영희", 80, 61, 74, 68, 91));
            
            console.log(students);

            // id가 area2인 요소 얻어옴
            var area2 = document.getElementById("area2");

            area2.innerHTML = "";

            // for문을 이용하여 배열 내용 출력
            for(var std of students){
                area2.innerHTML += std + " / 합계 : " + std.getSum() + "<br>";
            }
        }

    </script>
    
    <hr>
    음식명 : <input type="text" class="inputFoodInfo"> <br>
    가격 : <input type="number" class="inputFoodInfo"> 
    
    <button type="button" id="add">추가</button>

    <div id="printArea"></div>

    <script>
        // 생성자 함수 정의
        function Food(inputFoodInfo) {

            // 음식명이 작성된 input 요소의 값을 얻어와
            // 객체의 fName에 대입
            this.fName = inputFoodInfo[0].value;
            this.price = inputFoodInfo[1].value;

            // toString() 오버라이딩
            this.toString = function() {
                return "음식명 : " + this.fName + " / 가격 : " + this.price + "<br>";
            }
        }

        // id가 add인 요소가 클릭된 경우
        document.getElementById("add").onclick = function() {
            // class가 inputFoodInfo인 요소를 모두 얻어와 배열로 반환
            var inputFoodInfo 
                = document.getElementsByClassName("inputFoodInfo");

            // Food 생성자 함수를 통해 객체를 생성할 때
            // 매개변수로 inputFoodInfo 배열 전달
            var food = new Food(inputFoodInfo);

            // 생성된 Food 객체를
            // id가 printArea인 요소에 출력
            document.getElementById("printArea").innerHTML += food;
        }
    </script>


연습문제

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>연습문제</title>
    <style>
        #table1{
            border : 1px solid black;
            width: 100%;
        }
        .col1 {
            border : 1px solid lightgray;
        }

        .divs{
            margin : 10px;
            width : 30%;
            height: 400px;
            display: inline-block;
            float : left;
        }

        #tableN{
            text-align: center;
        }
        
        .tds {
            border : 1px solid lightgray;
        }

        td {
            /* 출력되는 이름, 점수를 가운데 정렬 */
            text-align: center;
        }
        
    </style>
</head>
<body>
    <div id="left" class="divs">

        <h3 id="tableN">학생 점수 관리 프로그램</h3>
        <form>
            <table id="table1" border="1px">
                <tr id="row1">
                    <th class="col1">이름</th>
                    <th class="col1">Java</th>
                    <th class="col1">Oracle</th>
                    <th class="col1">JDBC</th>
                    <th class="col1">HTML</th>
                    <th class="col1">합계</th>
                    <th class="col1">평균</th>
                </tr>
            </table>
        </form>

    </div>

    <div id="right" class="divs">
        <form>
            <table id="table2">
                <tr>
                    <td>이름 : </td>
                    <td><input type="text" class="inputInfo"></td>
                </tr>
                <tr>
                    <td>Java : </td>
                    <td><input type="text" class="inputInfo"></td>
                </tr>
                <tr>
                    <td>Oracle : </td>
                    <td><input type="text" class="inputInfo"></td>
                </tr>
                <tr>
                    <td>JDBC : </td>
                    <td><input type="text" class="inputInfo"></td>
                </tr>
                <tr>
                    <td>HTML : </td>
                    <td><input type="text" class="inputInfo"></td>
                    <td><button type="button" id="btn">추가</button></td>
                </tr>
            </table>
        </form>

        <script>
            
            function Score(inputInfo){
                this.name = inputInfo[0].value;
                this.java = Number(inputInfo[1].value);
                this.oracle = Number(inputInfo[2].value);
                this.jdbc = Number(inputInfo[3].value);
                this.html = Number(inputInfo[4].value);

                this.getSum = function() {
                    return this.java + this.oracle + this.jdbc + this.html;
                }

                this.getAgv = function() {
                    return this.getSum() / 4;
                }
            }

            document.getElementById("btn").onclick = function(){
                var inputInfo = document.getElementsByClassName("inputInfo");
                var score = new Score(inputInfo);

                with(score){
                document.getElementById("table1").innerHTML +=
                '<tr>' +
                '<td class="tds">' + name + '</td>' +
                '<td class="tds">' + java + '</td>' +
                '<td class="tds">' + oracle + '</td>' +
                '<td class="tds">' + jdbc + '</td>' +
                '<td class="tds">' + html + '</td>' +
                '<td class="tds">' + getSum() + '</td>' +
                '<td class="tds">' + getAgv() + '</td>' +
                '</tr>'
                }
            }
        </script>
    </div>
</body>
</html>

20201209_01



내장객체

	<h1>내장객체</h1>
	<h3>Object 객체</h3>
	<p>자바스크립트의 가장 기본적인 내장객체이다.<br>
		Object생성자함수를 통해 만들어진 인스턴스이다.</p>
	<button onclick="test1();">실행확인</button>
	<script>
		function test1() {
			//Object를 생성하는 방법
			var obj1 = {};
			var obj2 = new Object();

			console.log(obj1);
			console.log(obj2);
		}
	</script>


Object 객체의 기본 메소드

	<h3>Object 객체의 기본 메소드</h3>
	<h4>hasOwnProperty()와 propertyIsEnumerable()메소드</h4>
	<button onclick="test2()">실행확인</button>
	<div id="area1" class="area"></div>
	<script>
		function test2() {
			var object = {
				//name:"asd",
				age: 20
			};

			var area1 = document.getElementById("area1");

			//속성을 가지고 있는지 확인하는 메소드로 true와 false를 리턴한다.
			area1.innerHTML += "name 속성을 가지고 있나? : " + object.hasOwnProperty('name') + "<br>";
			area1.innerHTML += "age 속성을 가지고 있나? : " + object.hasOwnProperty('age') + "<br>";

			area1.innerHTML += "age 속성은 반복문을 사용할 수 있나? : " + object.propertyIsEnumerable('age') + "<br>";

		}

	</script>


constructor()메소드

	<h4>constructor()메소드</h4>
	<p>Object가 가지는 객체의 생성자 메소드이다.<br>
		자료형을 검사할 때 유용하게 사용할 수 있다.</p>
	<button onclick="test4();">실행확인</button>
	<div id="area3" class="area"></div>
	<script>
		function test4() {
			var num1 = 120;
			var num2 = new Number(120);

			var area3 = document.getElementById('area3');

			console.log("num1 : " + num1 + ", num2 : " + num2);
			console.log("num1의 자료형 : " + typeof (num1));
			console.log("num2의 자료형 : " + typeof (num2));
			console.log("num1 + num2 = " + (num1 + num2));


			area3.innerHTML = "num1의 자료형 : ";
			if (typeof (num1) == 'number') {
				area3.innerHTML += "숫자 <br>";
			} else {
				area3.innerHTML += "숫자아님 <br>";
			}

			area3.innerHTML += "num2의 자료형 : ";
			if (typeof (num2) == 'number') {
				area3.innerHTML += "숫자 <br>";
			} else {
				area3.innerHTML += "숫자아님 <br>";
			}


			//두 대상을 같은 자료형으로 취급하고 싶을 때 constructor메소드를 사용한다.

			area3.innerHTML += "num1.constructor == Number :  " + (num1.constructor == Number) + "<br>";
			area3.innerHTML += "num2.constructor == Number :  " + (num2.constructor == Number);

		}
	</script>


Number 객체

	<h3>Number 객체</h3>
	<button onclick="test5();">실행확인</button>
	<p>toFixed Test()</p>
	<div id="area6" class="area"></div>
	<script>
		function test5() {
			var num1 = 123.456789;
			var num2 = 123;

			var area6 = document.getElementById("area6");

			//숫자를 고정 소수점 자리로 나타낸 문자열을 만든다.
			area6.innerHTML += "num1의 기본값 : " + num1 + "<br>";
			area6.innerHTML += "num2의 기본값 : " + num2 + "<br>";
			area6.innerHTML += "num1.toFixed(1) : " + num1.toFixed(1) + "<br>";
			area6.innerHTML += "num1.toFixed(4) : " + num1.toFixed(4) + "<br>";
			area6.innerHTML += "num2.toFixed(4) : " + num2.toFixed(4) + "<br>";
			area6.innerHTML += "그럼 자료형은 ? : " + typeof (num1.toFixed(1)) + "<br>";

		}

	</script>


String객체의 HTML관련 메소드

	<h3>String객체의 HTML관련 메소드</h3>
	<button onclick="test6();">실행확인</button>
	<p>String 객체의 메소드는 크게 기본메소드와 HTML관련 메소드로 구분할 수 있다.</p>
	<div id="area7" class="area-big"></div>
	<script>
		function test6() {
			var str = "javascript";

			var area7 = document.getElementById("area7");

			area7.innerHTML += "기본값 : " + str + "<br>";
			area7.innerHTML += "anchor() : " + str.anchor() + "<br>";
			area7.innerHTML += "big() : " + str.big() + "<br>";
			area7.innerHTML += "bold() : " + str.bold() + "<br>";
			area7.innerHTML += "fontcolor('red') : " + str.fontcolor("red") + "<br>";
			area7.innerHTML += "fontsize(20) : " + str.fontsize(20) + "<br>";
			area7.innerHTML += "italics() : " + str.italics() + "<br>";
			area7.innerHTML += "link() : " + str.link("http://www.naver.com") + "<br>";
			area7.innerHTML += "small() : " + str.small() + "<br>";
			area7.innerHTML += "strike() : " + str.strike() + "<br>";
			area7.innerHTML += "sub() : " + str.sub() + "<br>";
			area7.innerHTML += "sup() : " + str.sup() + "<br>";
		}



	</script>


Date 객체

	<h3>Date객체</h3>
	<p>날짜를 관리하는 객체</p>
	<button onclick="test7();">실행확인</button>
	<div id="area8" class="area area-big"></div>
	<script>
		function test7() {
			//현재 시간
			var area8 = document.getElementById("area8");

			//GMT 시
			// 그리니치 평균시(Greenwich Mean Time, GMT)는 런던을 기점

			// 현재 시간
			var date1 = new Date();

			// new Date(dateString); 
			var date2 = new Date('June 18');
			var date3 = new Date('June 18, 2020');
			var date4 = new Date('June 18, 2020 09:30:23');


			area8.innerHTML += "Date() : " + date1 + "<br>";
			area8.innerHTML += "Date('June 15') : " + date2 + "<br>";
			area8.innerHTML += "Date('June 18, 2020'') : " + date3 + "<br>";
			area8.innerHTML += "Date('June 18, 2020 09:30:23') : " + date4 + "<br>";

			//UTC시간
			// new Date(year, month-1, day, hours, minutes, seconds, milliseconds)
			var date5 = new Date(2020, 5, 18);
			var date6 = new Date(2020, 5, 18, 9, 30, 23);
			var date7 = new Date(2020, 5, 18, 9, 30, 23, 1);

			area8.innerHTML += "Date(2020, 0, 15) : " + date5 + "<br>";
			area8.innerHTML += "Date(2020, 0, 15, 17, 30, 23) : " + date6 + "<br>";
			area8.innerHTML += "Date(2020, 0, 15, 17, 30, 23, 1) : " + date7 + "<br>";
		}
	</script>



    <h3>Date 객체의 메소드</h3>
	<button onclick="test8();">실행확인</button>
	<div id="area9" class="area-big"></div>
	<script>
		function test8() {
			var date = new Date();

			var area9 = document.getElementById("area9");

			area9.innerHTML += "getFullYear() : " + date.getFullYear() + "<br>";
			area9.innerHTML += "getMonth() : " + (date.getMonth() + 1) + "<br>";
			area9.innerHTML += "getDate() : " + date.getDate() + "<br>";
			area9.innerHTML += "getDay() : " + date.getDay() + "<br>";
			area9.innerHTML += "getHours() : " + date.getHours() + "<br>";
			area9.innerHTML += "getMinutes() : " + date.getMinutes() + "<br>";
			area9.innerHTML += "getSeconds() : " + date.getSeconds() + "<br>";
			area9.innerHTML += "getMilliseconds() : " + date.getMilliseconds() + "<br>";
			area9.innerHTML += "getTimezoneOffset() : " + date.getTimezoneOffset() + "<br>";
			area9.innerHTML += "getTime() : " + date.getTime() + "<br>";


			//1970년 1월 1일 자정 기준 밀리세컨 단위로 객체 생성
			var date2 = new Date(new Date(2018, 0, 15, 17, 30, 23, 1).getTime());

			console.log(date2);


			// 날짜 사이의 간격 구하기
			var now = new Date();
			var start = new Date('2020, 10, 6');
			var end = new Date('2011, 3, 11');

			var interval1 = now.getTime() - start.getTime();
			var interval2 = end.getTime() - now.getTime();

			var time1 = Math.floor(interval1 / (1000 * 60 * 60 * 24));
			var time2 = Math.ceil(interval2 / (1000 * 60 * 60 * 24));

			alert("개강한지 " + time1 + "일 째 입니다. \n"
				+ "종강까지 " + time2 + "일 남았습니다.");
		}
	</script>

Window 객체

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>18_내장객체2</title>
    <style>
        .area{
            width : 300px;
            height: 100px;
            border : 1px solid black;
            font-size: 50px;
            font-weight: bold;

        }

        .long{
            width : 100px;
            height : 300px;
            border : 1px solid black;

            /* 내용이 요소의 크기를 넘어섰을 경우에 대한 스타일 */
            overflow : scroll; /* overflow는 기본값이 visible */
        }

        .big{
            height : 400px;
            border : 1px solid black;
        }
    </style>
</head>
<body>
    <h1>Window 객체</h1>
    <pre>
    - 브라우저 창 자체를 나타내는 객체
    
    - Window 객체는 자바스크립트의 최상위 객체이며 BOM, DOM으로 나누어진다.
    
    BOM(Browser Object Model) : location, navigator, history, screen;
    DOM(Document Object Model) : document
    </pre>

    <hr>

    <h3>window 객체의 timer 관련 메소드</h3>

    <h4>setTimeout() 메소드 : 일정 시간 후 특정 내용을 한 번만 수행한다.</h4>

    <button type="button" id="btn1">확인하기</button>
    <script>
        document.getElementById("btn1").onclick = function() {
            var newWindow = window.open(); // 새창 열기

            newWindow.alert("확인 버튼을 클릭하면 3초 후에 이 페이지는 종료됩니다.");
            // 새창에 경고창 띄우기

            //window.setTimeout(함수, 지연시간(ms));
            window.setTimeout( function(){
                newWindow.close(); // 새창 닫기
            }, 3000); // 3000 = 3초


        }
    </script>

    <hr>

    <h4>setInterval() 메소드 : 일정 시간마다 특정 내용을 반복 수행함.</h4>
    <button type="button" id="btn2">확인하기</button>
    <div id="area2" class="area"></div>

    <script>
        document.getElementById("btn2").onclick = function() {
            var area2 = document.getElementById("area2");

            // 현재 시간이 기록된 객체 Date 생성
            var date = new Date();
            // 14 : 5 : 초

            area2.innerHTML = date.getHours() + " : " 
                            + date.getMinutes() + " : " 
                            + date.getSeconds();

            //window.setInterval(함수, 지연시간(ms));
            window.setInterval(function(){
                var date = new Date();
            // 14 : 5 : 초

            area2.innerHTML = date.getHours() + " : " 
                            + date.getMinutes() + " : " 
                            + date.getSeconds();

            //window.setInterval(함수, 지연시간(ms));
            window.setInterval(function(){}, 1000);
            }, 1000);
        }
    </script>

    <hr>

    <h4>clearInterval() 메소드 : 반복 수행중인 setInterval을 멈추게함.</h4>

    <button type="button" onclick="start();">시작</button>
    <button type="button" onclick="stop_stopwatch();">정지</button>
    <button type="button" onclick="record();">기록</button>

    <div id="area3" class="area"></div>
    <div id="area3-2" class="long"></div>
    <script>
        var stop = false;
        var stopwatch;

        // 스톱워치 시작
        function start(){
            stop = false;

            // 이전에 기록된 시간을 모두 삭제
            document.getElementById("area3-2").innerHTML = "";

            // 스톱워치가 출력될 요소 얻어오기
            var area3 = document.getElementById("area3");

            var count = 0;

            if(!stop){
                stopwatch = window.setInterval( function(){
                    area3.innerHTML = parseInt(count / 100 / 60 % 60)
                                        + " : " + parseInt(count / 100 % 60)
                                        + " : " + parseInt(count % 100);
                    count++;
                }, 10 );  
            }
        }

        // 스톱워치 정지
        function stop_stopwatch(){
            window.clearInterval(stopwatch);
            stop = true;
        }

        // 시간 기록
        function record(){
            document.getElementById("area3-2").innerHTML
              += document.getElementById("area3").innerHTML + "<br>";
        }
    </script>
</body>
</html>

location 객체

    <h3>location 객체</h3>
    <pre>
    브라우저의 주소 표시줄과 관련된 객체
    </pre>

    <button type="button" id="btn4">location확인</button>
    <div id="area4" class="big"></div>

    <script>
        document.getElementById("btn4").onclick = function() {
            
            //for in 구문 : 객체 내 속성을 순서대로 접근하는 구문
            for(var key in location) {
                document.getElementById("area4").innerHTML
                    += key + " : " + location[key] + "<br>";
            }
        }
    </script>

    <button type="button" onclick="location.href = 'https://www.naver.com'">네이버로 이동</button>

    <button type="button" onclick="location= 'https://www.naver.com'">네이버로 이동</button>

    <button type="button" onclick="location.replace('https://www.naver.com')">네이버로 이동</button>
    <!-- replace()는 현재 화면 자체를 바꾸는 메소드로 뒤로가기가 안됨. -->

    <br><br><br>

    <!-- 새로고침(==갱신) -->
    <button type="button" onclick="location.href = location.href">새로고침</button>
    <button type="button" onclick="location.href = location">새로고침</button>

    <!-- reload() : 현재 페이지 위치를 유지한채로 새로고침-->
    <button type="button" onclick="location.reload();">reload()</button>


내장함수

<!DOCTYPE html>
<html lang="ko">

<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>19_내장함수</title>
	<style>
		.area {
			background: lightgray;
			border: 1px solid black;
			height: 150px;
		}

		.bigarea {
			background: lightgray;
			border: 1px solid black;
			height: 350px;
		}
	</style>
</head>

<body>
	<h1>JavaScript 내장함수</h1>
	<h3>인코딩과 디코딩에 관련된 내장함수</h3>
	<h4>웹 통신 시 유니코드 문자는 오작동을 일으킬 문제가 있어 인코딩 필요</h4>

	<p>escape : 영문 알파벳, 숫자, 일부 특수문자(@, *, -, _, ., /)를 제외한 모든 문자를 인코딩한다.<br>
		encodeURI : escape에서 인터넷주소에 사용되는 일부 특수문자(:, ;, /, =, ?, &)는 변환하지 않는다.<br>
		encodeURIComponent : 알파벳과 숫자를 제외한 모든 문자를 인코딩한다. (UTF-8방식)<br>
		<br>
		unescape : escape로 인코딩된 문자를 디코딩한다.<br>
		decodeURI : encodeURI로 인코딩된 문자를 디코딩한다.<br>
		decodeURIComponent : encodeURIComponent로 인코딩된 문자를 디코딩한다.
	</p>

	<button onclick="test1();">실행확인</button>
	<div id="area1" class="area"></div>
	<script>
		function test1() {
			var URI = 'http://www.naver.com?test=한글입니다.';

			var esURI = escape(URI);
			var enURI = encodeURI(URI);
			var enURIC = encodeURIComponent(URI);

			var area1 = document.getElementById("area1");

			area1.innerHTML = "";
			area1.innerHTML += "원본 URI : " + URI + "<br>";

			area1.innerHTML += "escape() : " + esURI + "<br>";
			area1.innerHTML += "encodeURI() : " + enURI + "<br>";
			area1.innerHTML += "encodeURIComponent() : " + enURIC + "<br>";

			area1.innerHTML += "unescape() : " + unescape(esURI) + "<br>";
			area1.innerHTML += "decodeURI() : " + decodeURI(enURI) + "<br>";
			area1.innerHTML += "decodeURIComponent() : " + decodeURIComponent(enURIC) + "<br>";
		}
	</script>

	<hr>

	<h3>eval()함수</h3>
	<!-- evaluate / evaluation -->
	<p>문자열을 자바스크립트 코드로 변환해 실행하는 함수이다.</p>
	<label>숫자1 입력 : </label><input type="text" id="number1"><br>
	<label>숫자2 입력 : </label><input type="text" id="number2"><br>
	<button onclick="test2();">실행확인</button>
	<div id="area2" class="area"></div>
	<script>
		function test2() {
			var testEval = "";

			testEval += "var number1 = parseInt(document.getElementById('number1').value);";
			testEval += "var number2 = parseInt(document.getElementById('number2').value);";
			testEval += "var sum = 0;";
			testEval += "sum = number1 + number2;";
			testEval += "document.getElementById('area2').innerHTML += number1 + '과 ' + number2 + '의 합은 : ' + sum + '입니다.';";

			eval(testEval);
			alert(number1 + '' + number2 + '의 합은 뭘까요??');
		}
	</script>

</body>
</html>


DOM

    <h1>DOM(Document Object Model)</h1>
    <pre>
    - HTML 내용이 표시되는 문서 자체를 나타내는 객체

    - HTML에 작성된 태그들을 구조화(트리 구조)하였을 때
      각각의 태그 요소들을 노드(Node)라고 한다.
    
    - 노드 종류 : 텍스트 노드가 있는 노드(h1, h2, pre, p, div, span...)
                 텍스트 노드가 없는 노드(img, input, hr, br ...)
    </pre>


텍스트 노드가 있는 노드 생성

    <h3>텍스트노드가 
        <span style="font-weight: bold; color : red;">있는 노드</span>
         생성하기</h3>

    <button type="button" id="btn1">실행확인</button>
    <div id="area1" class="area"></div>

    <script>
        document.getElementById("btn1").onclick = function() {
            // document.getElementById("area1").innerHTML 
            //   += "<h4>안녕하세요.</h4>";

            // element 생성
            var el = document.createElement("h4");
            // h4 요소가 만들어져 el 변수에 저장
            //  -> 아직 html 문서에는 배치되지 않아
            //     화면에는 보이지 않음

            // textnode 생성
            var text = document.createTextNode("안녕하세요?");

            // 노드 연결
            el.appendChild(text);
            // el(h3태그) 내부에 text("안녕하세요")를 content 마지막에 추가
            //  -> <h4>안녕하세요?</h4> 형태의 요소가 완성
            // 완성된 요소 el을 area1의 content 마지막에 추가하기

            document.getElementById("area1").appendChild(el);
            //area1 요소에 el을 노드 연결
         
        }
    </script>


텍스트 노드가 없는 노드 생성

    <h3>텍스트 노드가 
        <span style="color : red;">없는 노드</span> 생성</h3>

        <button type="button" id="btn2">실행확인</button>
        <div id="area2" class="area">
            <!-- <img src="logo.jpg" width="200" height="100"> -->
        </div>
        <script>
            document.getElementById("btn2").onclick = function() {
                // img 요소 생성
                var img = document.createElement("img");

                // 생성된 img 요소에 속성 추가
                img.src = "logo.jpg";
                img.width = "200";
                img.height = "100";

                // img에 없는 속성 추가해보기
                // img.myProperty1 = "aaa"; -> 추가 불가능
                img.setAttribute("myProperty2", "bbb");

                //area2 요소와 img 요소 노드 연결
                document.getElementById("area2").appendChild(img);
            }
        </script>


노드 삭제

        <h3>노드 삭제</h3>
        <pre>

        </pre>
        <button type="button" id="btn3">노드삭제</button>

        <script>
            document.getElementById("btn3").onclick = function() {
                document.getElementById("area2").lastChild.remove();
                // lastChild : 요소의 마지막 자식을 선택
            }
        </script>


노드 추가/삭제

        <h3>노드 추가/삭제</h3>
        <button type="button" id="add">추가</button>
        <button type="button" id="sum">합계</button>

        <table>
            <tbody id="wrapper">
                <tr>
                    <td>입력 : </td>
                    <td>
                        <input type="number" class="inputNumbers">
                    </td>
                </tr>

            </tbody>
        </table>

        <!-- 합계 출력 영역 -->
        <div id="printArea"></div>

        <script>
            // 추가 버튼 클릭 시
            document.getElementById("add").onclick = function(){
    
                var tr = document.createElement("tr");
                
                // td1에 textNode("입력") 추가
                var td1 = document.createElement("td");
                var text = document.createTextNode("입력");
                td1.appendChild(text);
    
                // td2에 input요소 추가
                var td2 = document.createElement("td");
                var input = document.createElement("input");
                
                // input 태그에 필요한 속성 추가
                input.setAttribute("type", "number");
                input.setAttribute("class", "inputNumbers");
    
                td2.appendChild(input);
                
                // td3에 button요소 추가
                var td3 = document.createElement("td");
                var btn = document.createElement("button");
    
                // button에 필요한 속성 추가
                btn.setAttribute("type", "button");
                btn.setAttribute("onclick", "deleteRow(this)");
                //deleteRow(this)에서 this란?
                // -> onclick 이벤트가 발생한 요소
                //  --> 쉽게 말해서 클릭된 버튼 그 자체
    
                // button에 삭제 textnode 추가
                btn.appendChild( document.createTextNode("삭제") );
    
                td3.appendChild(btn);
    
                // tr에 추가
                tr.appendChild(td1);
                tr.appendChild(td2);
                tr.appendChild(td3);
    
                // tbody(wrapper)에 tr 추가
                document.getElementById("wrapper").appendChild(tr);
    
            }

            // 삭제함수
            function deleteRow(btn){
                // btn == 클릭된 버튼 요소
                // .parentNode : 해당 요소의 부모 요소 선택
                console.log(btn); // 삭제버튼
                console.log(btn.parentNode); //td
                console.log(btn.parentNode.parentNode); //tr
                btn.parentNode.parentNode.remove();
            }

            document.getElementById("sum").onclick = function(){
                var inputNumbers = document.getElementsByClassName("inputNumbers");
                var sum = 0;
                

                for(var i of inputNumbers){
                    sum += Number(i.value);
                }
                
                document.getElementById("printArea").innerHTML
                    = "<h3> 합계 : " + sum + "</h3>";
                
            }

        </script>

태그: ,

카테고리:

업데이트:

댓글남기기