티스토리 뷰
javascript/ECMAScript
Javascript : normalize() 와 wholeText 를 이용해 텍스트 노드 다루기
이브라히모비치 2019. 7. 3. 15:02
HTML의 텍스트 노드(Text node) 는 다루기 까다롭다. 특히 동적으로 삽입되거나 생성될때 더욱 그렇다.
예시를 살펴보자.
<p id=“el”>하나의 글이 있습니다.</p>
p태그에 텍스트 노드를 하나 더 추가 하면 :
let el = document.getElementById('el');
el.appendChild(document.createTextNode(' 글을 하나 더 추가 합니다.'));
console.log(el.childNodes.length); // 2
글을 하나 더 추가 한 뒤, childNodes 의 개수를 로그로 찍어보면 2개라고 나온것에 주목하자.
이 노드들은 단일 문자열 이지만 동적으로 추가 되었기 때문에, 각각 분리된 노드로 취급된다.
경우에 따라서는 하나의 텍스트 노드로 다루는게 나은데, normalize() 와 wholeText 로 쉽게 구현할 수 있다.
el.normalize();
console.log(el.childNodes.length); // 1
normalize() 를 호출하면 요소 내부의 인접한 텍스트 노드들이 병합된다.
텍스트 노드 사이에 HTML 요소들이 존재하는 경우, HTML 은 그대로 유지되면서 인접한 텍스트 노드는 모두 병합된다.
특별한 이유로, 분리된 텍스트 노드를 별도로 유지하면서 하나의 단위로 얻길 원한다면, wholeText 가 유용하다.
이는 normalize() 를 호출하지 않고도 병합된 하나의 텍스트 노드를 얻을 수 있다.
console.log(el.childNodes[0].wholeText);
// 하나의 글이 있습니다. 글을 하나 더 추가 합니다.
console.log(el.childNodes.length); // 2
normalize() 를 호출하지 않는 한, 텍스트 노드의 개수는 2를 유지한다. 또한 wholeText 를 이용해 전체 문장을 출력할 수 있다.
하지만 몇가지 유의 사항이 있다 :
- 요소 보다는 텍스트 노드로 접근해서 wholeText 를 호출 해야 한다. (el.childNodes[0])
- 텍스트 노드는 인접해야 하며, HTML 로 분리되어 있으면 안된다.
'javascript > ECMAScript' 카테고리의 다른 글
Javascript : addEventListener 의 3번째 options 인자 (0) | 2019.07.02 |
---|---|
사용 가능한 ES2019(ES10) 기능 5가지 (0) | 2019.06.24 |
javascript : call, apply, bind 차이 - this의 사용 (7) | 2018.02.06 |
[ECMAScript6] Template Strings, Enhanced Object Literals (0) | 2016.04.15 |
[ECMAScript6] Class 클래스 (0) | 2016.04.15 |
댓글
Kakao 다음웹툰 / 웹표준 및 ft기술, 웹접근성 / 세아이 아빠, 제주 거주 중..
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday