본문 바로가기

카테고리 없음

[Javascript] innerHTML, outerHTML, textContent에 대해... 엘리먼트의 텍스트 변경하기

innerHTML 은 요소의 자식들만 가져옴.

outerHTML 은 요소 자체를 가져옴.

textcontent innerHTML 과 비슷하지만 태그를 문자로 인식하여 가져옴.





엘리먼트의 innerHTML 요소


1
var content = element.innerHTML;
cs

엘리먼트가 <div><input></div> 일 경우, <input> 을 가져옴.


content 변수는


content = "<input>";


처럼 되는 것.


그렇다면 요소 안에 값을 넣을때는?

1
element.innerHTML = content;
cs


간단하다.


이걸 응용해서 예를들면 body태그에 적용시킬 수 있다.

1
document.body.innerHTML = "";
cs


이렇게 하면 body태그 안에있는 모든 요소가 사라져버린다.


하지만 innerHTML은 보안문제를 일으킬 가능성이 있다. innerHTML은 자바스크립트 태그를 읽지는 못하지만, 태그 안에 요소로서 가져올수는 있는데 그 예제가 바로 오른쪽의 링크에 있다. innerHTML의 보안문제


물론 innerHTML로 인해 발생하는 보안문제를 겪기는 꽤 드물다. 그래도 기능의 동작이 아닌 순수한 텍스트만을 나타내고 싶을때는 textContent를 사용하도록 해야한다. 둘중 어느걸 사용한다고 해서 성능이 더 빠르고 그딴건 없다.




엘리먼트의 textContent 요소


textContent는 innerHTML과 크게 다르지 않다.

위에서 언급했던 것 처럼 textContent의 다른 점은 불러온 텍스트 요소를 기능하지 않는다는 것이었다.


1
2
document.body.innerHTML = "<input>";
document.body.textContent = "<input>";
cs

이 스크립트를 실행시킬 경우, innerHTML를 적용시킨 1행에서는 input태그가 정상적으로 나타나지만, textContent를 적용시킨 2행에서는 그저 텍스트로 <input>이라는 글자만 나타날 뿐이다.






엘리먼트의 outerHTML 요소들을 가져오기


innerHTML과 outerHTML의 차이는 태그와 함께 가져오느냐, 태그의 요소를 가져오느냐의 차이이다.


1
2
3
4
5
6
7
8
9
10
/*
<body>
    <div class="b">Hi !</div>
</body>
*/
 
var el = document.getElementsByClassName("b")[0]; // 엘리먼트 (Element)
 
var a = el.innerHTML; // Hi !
var b = el.outerHTML; // <div class="b">Hi !</div>
cs


이렇게 innerHTML과 outerHTML은 자바스크립트에서 기본중의 기본에 속하고, 이를 알아야 엘리먼트를 수월하게 변경할 수 있다.


하지만 outer의 큰 단점이 하나 있다. 부모 엘리먼트가 없을 경우 outerHTML이 통하지 않는다.

이에 대한 예제는 오른쪽 링크를 타고 들어가보도록 하자. 부모 없는 outerHTML



outerHTML은 내가 쓰고있는 코딩 툴인 Bracket에서 Ctrl + Space를 했을 때 목록에 존재하지 않는 허점(?)이 있다. 이는 패키지를 따로 다운받거나 플러그인을 내려받으면 되겠지만 귀찮다.