본문 바로가기

웹언어/JAVASCRIPT

[JS강좌] 21강 DOM - 문서객체생성 - 오쌤의 니가스터디

728x90
반응형

 

 

 

 

 

 

** 영상으로 보실 분은 아래 주소를 클릭해주세요.

https://youtu.be/fjLjC4zWatA

 

 

 

 

 

 

 

 

 

 

 

 

- 이번 강좌에서는 DOM인 요소, 텍스트등을 생성해보도록 하겠습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1. 문서객체 동적생성 - 요소생성

- 위에서는 문서객체가 미리 생성되어 있는 것을 선택하는 것을 배워보았습니다.

- 요번에는 자바스크립트가 문서객체를 직접 생성하는 것을 해보도록 하겠습니다.

객체생성 종류 설명
정적생성 html문서에 태그로 직접 작성하여 생성하는 것
동적생성 자바스크립트로 문서객체를 생성하는 것

- 문서객체 생성은 속성 방식 있고 메서드 방식이 있습니다.

- 두 방식 모두 공부해보록 하겠습니다.

 

 

 

 

 

 

 

 

1) innerHTML속성을 이용한 문서객체 생성

- innerHTML은 선택된 문서객체에 HTML코드를 문자열로 처리해주는 속성입니다.

 

## 문법

문서객체선택.innerHTML = '추가할문자열';

 

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
    </head>
    <body>
        <h1 id="text"></h1>
        <script>
            var text = document.getElementById('text');

            text.innerHTML = '<a href="#">링크태그</a>';
        </script>
    </body>
</html>

 

 

 

 

## 코드 결과

- 결과도 잘 나왔지만, 크롬 개발자모드에서 [Elements]부분을 확인해보면 h1태그 안에 자손으로 a태그가 들어간 것을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

2) document.write() 메서드

- innerHTML은 선택된 문서객체에 HTML코드를 문자열로 처리해주는 속성입니다.

 

## 문법

문서객체선택.innerHTML = '추가할문자열';

 

 

 

## 준비구문 없이 사용한 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        <script>
            document.write('<h2>제목태그2</h2>');
        </script>
    </head>
    <body>
        <h1 id="text">제목태그1</h1>
    </body>
</html>

 

 

## 준비구문 없이 사용한 코드 결과

- 준비구문 없이 작성하면 h2태그가 맨위로 추가된 것을 볼수 있습니다.

 

 

 

 

 

## 준비구문 사용한 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        <script>
            window.onload = function(){
                document.write('<h2>제목태그2</h2>');
            }
        </script>
    </head>
    <body>
        <h1 id="text">제목태그1</h1>
    </body>
</html>

 

 

## 준비구문 사용한 코드 결과

- 준비구문을 사용하면 기존 문서객체들을 모두 삭제해버리기 때문에 특히 주의해서 써야할 메서드입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3) createElement() 메서드

- createElement() 메서드는 요소를 생성해주는 메서드입니다.

- 생성한 것을 삽입하는 appendChild()메서드와 함께 사용해줘야합니다.

 

 

## 문법

document.createElement('태그요소명');

 

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        
    </head>
    <body>
        <h1>제목태그1</h1>
        <script>
            var h2 = document.createElement('h2');

            h2.innerHTML = '제목태그2';

            document.body.appendChild(h2);
        </script>
    </body>
</html>

- document.body : body태그를 선택하는 속성입니다.

 

 

## 코드 결과

- 제목태그1 뒤에 제목태그2가 생성된 것을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

 

4) 속성컨트롤 메서드

메서드 종류 설명
getAttribute('속성명') 문서객체의 태그속성값을 얻어오는 메서드, 게터
setAttribute('속성명',값) 문서객체의 태그속성값을 변경시키는 메서드, 세터

- 이번에는 속성까지 동적생성하여 이미지를 생성해보도록 하겠습니다.

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        
    </head>
    <body>
        <script>
            //이미지 요소 생성
            var img = document.createElement('img');

            //src속성 생성
            img.setAttribute('src','https://cdn.pixabay.com/photo/2018/07/13/10/20/cat-3535404_960_720.jpg');

            //width속성 생성
            img.setAttribute('width',300)

            document.body.appendChild(img);
        </script>
    </body>
</html>

 

 

## 코드 결과

- 이미지태그를 동적으로 잘 생성한 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 문서객체 동적생성 - 텍스트 생성

- 이번에는 텍스트를 생성해보도록 하겠습니다. 

텍스트생성 종류 설명
innerHTML innerHTML은 문자열을 문서객체에 자손으로 추가해줍니다. 대신 문자열에 태그가 있으면 인식이 됩니다.
innerText innerText는 문자열을 문서객체에 자손으로 추가해줍니다.  대신 문자열에 태그가 있어도 인식이 되지않고 문자열로 반환합니다.
그리고 보여지는 텍스트만 인식하고 display: none;으로 처리된 것은 읽지 않습니다. 
textContent textContent는 Node의 속성으로 해당 노드가 가지고 있는 텍스트값을 그대로 읽습니다. 숨겨진 텍스트(display: none;)도 인식합니다.

 

 

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        <style>
            .name{ display: none; }
        </style>
    </head>
    <body>
        <h1 id="h1Text01"></h1>
        <h1 id="h1Text02"></h1>
        <h1 id="h1Text03"></h1>
        <hr>
        <h2 id="h2Text">안녕하세요. <span class="name">홍길동</span>님</h2>
        <script>
            var h1Text01 = document.getElementById('h1Text01');
            var h1Text02 = document.getElementById('h1Text02');
            var h1Text03 = document.getElementById('h1Text03');

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

            h1Text01.innerHTML = '<a href="#">링크태그1</a>';
            h1Text02.innerText = '<a href="#">링크태그2</a>';
            h1Text03.textContent = '<a href="#">링크태그3</a>';

            console.log('innerHTML : ' + h2Text.innerHTML);
            console.log('innerText : ' + h2Text.innerText);
            console.log('textContent : ' + h2Text.textContent);
        </script>
    </body>
</html>

 

 

## 코드 결과

- 속성을 텍스트로 쓰는 경우 innerHTML은 태그를 인식해서 문서객체에 태그로 처리해줍니다.

- 속성을 텍스트로 쓰는 경우 innerText는 태그를 인식하지 못해서 문자열로 그대로 반환합니다.

- 속성을 텍스트로 쓰는 경우 textContent도 태그를 인식하지 못해서 문자열로 그대로 반환합니다.

 

- 속성을 읽어들이는 경우 innerHTML은 span태그까지 읽어오는 것을 확인할 수 있습니다.

- 속성을 읽어들이는 경우 innerText은 태그를 인식하지도 못하지만, display: none;으로 처리된 span태그의 텍스트도 불러오지 못합니다.

- 속성을 읽어들이는 경우 textContent는 태그를 인식하지는 못하지만, display: none;으로 처리된 span태그의 텍스트도 불러오는 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3. 문서객체 자손 관리 메서드

- 이번에는 자손을 생성/삭제/변경해보도록 하겠습니다. 

자손관련 메서드 종류 설명
removeChild(요소) 자손요소를 제거합니다. 
appendChild(요소) 자손요소를 추가합니다.
replaceChild(새로운요소,이전요소) 자손요소를 새롭게 변경합니다.

 

 

 

 

 

 

1) appendChild()를 통한 자손 추가

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
        
    </head>
    <body>
        <h1>제목태그1</h1>
        <script>
            var h2 = document.createElement('h2');

            h2.innerHTML = '제목태그2';

            document.body.appendChild(h2);
        </script>
    </body>
</html>

- document.body : body태그를 선택하는 속성입니다.

 

 

## 코드 결과

- 제목태그1 뒤에 제목태그2가 생성된 것을 확인할 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

2) removeChild()를 통한 자손 제거

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
    </head>
    <body>
        <div id="box">
            <h1 id="h1">제목태그</h1>
            <p id="p">문단태그</p>
        </div>
        <script>
            var box = document.getElementById('box');
            var h1 = document.getElementById('h1');
            var p = document.getElementById('p');

            box.removeChild(h1);
        </script>
    </body>
</html>

 

 

## 코드 결과

 

 

 

 

 

 

 

3) replaceChild()를 통한 자손 변경

## 코드 예시

<!DOCTYPE html>
<html lang="ko">
    <head>
        <meta charset="UTF-8">
        <title>JS - DOM</title>
    </head>
    <body>
        <div id="box">
            <h1 id="h1">제목태그1</h1>
            <p id="p">문단태그</p>
        </div>
        <script>
            var box = document.getElementById('box');
            var h1 = document.getElementById('h1');
            var p = document.getElementById('p');

            var h2 = document.createElement('h2');
            h2.textContent = '제목태그2';

            box.replaceChild(h2,h1);
        </script>
    </body>
</html>

 

 

## 코드 결과

- h1태그가 h2태그로 변경된 것을 확인할 수 있습니다. 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형