-
DOM 조작 - 컨텐츠 추가하기프론트엔드/DOM 2020. 10. 16. 12:44
다른 글에선 HTML에 컨텐츠를 추가하거나 읽어줄 때 다음과 같은 방법을 사용한다고 했다.
선택된 요소 노도의 텍스트 값 확인: 'textContent'
선택된 요소 노도의 텍스트 값 확인: 'innerText'
선택된 요소 노도의 텍스트+태그까지 확인: 'innerHTML'
이 중에서 'innerHTML'은 텍스트 뿐 아니라 태그는 따로 분류하여 처리한다.
만약에 자바스크립트를 통해 HTML 화면상에 무언가 문서를 추가로 넣고 싶다면 'innerHTML'을 쓴다.
다만 'innerHTML'은 보안상의 문제를 일으킬 수 있다.
그렇다면 어떻게 해야 상대적으로 안전하게 HTML 화면에 내용을 추가해줄 수 있을까?
그럴 때는 각종 노드를 만들고 다루는 메서드를 이용하면 된다.
우선 간단하게 보면 다음과 같다.
createElement(tagname) : 태그 이름을 인자로 전달하여 요소를 생성한다.
createTextNode(txt) : 텍스트를 인자로 전달 받아 텍스트 노드를 생성한다.
appendChild(Node) : 인자로 전달한 노드를 마지막 자식 요소로 DOM 트리에 추가한다.
removeChild(Node) : 인자로 전달한 노드를 DOM 트리에서 제거한다.
자세한 사용법은 다음과 같다.
1. create 메서드 사용법
<body> <div class="container"></div> </body>
위와 같이 아무 내용도 없는 <div>에 내용을 추가해주는 함수 코드다.
<script> let con = document.getElementsByClassName('container')[0]; function createList(text){ let p = document.createElement('p'); // p 태그 요소 노드 생성 let newtext = document.createTextNode(text); // 인자로 만든 텍스트를 이용해 텍스트 노드 생성 p.appendChild(newtext); // p 태그 요소 노드에 텍스트 노드를 자식으로 추가 con.appendChild(p); // div 태그 요소 노드에 p 태그 요소 노드 자식으로 추가 } createList("테스트입니다."); </script>
해당 함수를 실행하면 다음과 같은 결과가 나타난다.
콘솔에서 생성한 <p>를 출력해보면 다음과 같다.
2. create 메서드와 innerHTML의 차이
'createElement()'메서드와 'createTextNode()'메서드 이용법을 알아봤다.
여기까진 좋다.
그런데 이게 'innerHTML'을 대신한다는걸까?
아래는 위의 내용을 실행하기 전 아무 내용이 없는 <div>태그다.
이제 여기에 붉은색 글씨를 추가해줄 예정이다.
<body> <div class="container"></div> </body>
그리고 아래는 각각 'create'메서드와 'innerHTML'에 원하는 텍스트를 넣을 수 있는 함수다.
<script> let con = document.getElementsByClassName('container')[0]; function createList(text){ let p = document.createElement('p'); // p 태그 요소 노드 생성 let newtext = document.createTextNode(text); // 인자로 만든 텍스트를 이용해 텍스트 노드 생성 p.setAttribute('style', 'color : red'); p.appendChild(newtext); // p 태그 요소 노드에 텍스트 노드를 자식으로 추가 con.appendChild(p); // div 태그 요소 노드에 p 태그 요소 노드 자식으로 추가 } createList("<span style='color : red'> innerHTML 테스트입니다 </span>"); function inner(text){ let p = document.createElement('p'); // p 태그 요소 노드 생성 p.innerHTML = text; // p태그에 innerHTMl로 텍스트 삽입 con.appendChild(p); // div 태그 요소 노드에 p 태그 요소 노드 자식으로 추가 } inner("<span style='color : red'> innerHTML 테스트입니다 </span>"); </script>
두 함수에 아래의 텍스트를 넣은 결과는 다음과 같다.
<span style='color : red'> innerHTML 테스트입니다 </span>
'textContent'를 이용할 때와 달리 'create' 메서드만으로도 'innerHTML'을 넣었을 때와 같은 효과를 낸다.
즉 이제 사용자가 입력한 텍스트를 사용자 개입없이도 다양한 방식으로 화면에 표현할 수 있다는 것이다.
'프론트엔드 > DOM' 카테고리의 다른 글
DOM 조작 - 텍스트 노드에 대한 접근 / 수정 2 (0) 2020.10.16 DOM 조작 - 속성 노드의 생성, 수정, 삭제 2 (0) 2020.10.16 DOM 조작 - 속성 노드의 생성, 삭제 (0) 2020.10.16 DOM 조작 - 텍스트 노드에 대한 접근 / 수정 (0) 2020.10.13 DOM - 노드의 관계를 통한 접근 (0) 2020.10.07