innerHTML vs innerText vs textContent
Javascript에서 Node 또는 Element의 텍스트값을 읽어오거나 설정할 때 innerHTML, innerText, textContent 속성을 사용하게 됩니다. 그런데 여기서 문제는, 어떤 상황에서 어떤 것을 사용하느냐입니다. 왜냐하면 각각이 가져오거나 수정하는 내용에는 차이가 있기 때문입니다. 헷갈리지만 가장 기본적인 내용 중 하나이니 예제로 알아보겠습니다!
html body 부분이 아래와 같이 적혀 있다고 했을 때 세 가지를 통해 각각 어떤 값이 가져와지는지 보겠습니다.
<div id="testElem">
<p>Hello <strong>World</strong></p>
</div>
innerHTML
innerHTML 속성은 'Element'의 속성으로, Element 내부에 있는 HTML 또는 XML 마크업 내용을 모두 가져오거나 설정합니다.
이 속성을 통해 HTML 태그를 추가하거나 제거하고, 요소 내용을 변경할 수 있습니다. 주의할 점은 innerHTML을 사용할 때, 내용에 포함된 스크립트 태그나 이벤트 핸들러 등이 실행될 수 있다는 점입니다.
예를 들어 script 내용을 아래로 설정하게 될 경우 출력값은 < p > 태그와 같은 스크립트 태그까지 모두 포함하게 됩니다.
var element = document.getElementById("testElem");
// HTML 내용 가져오기
var htmlContent = element.innerHTML;
console.log(htmlContent); // 출력: <p>Hello <strong>World</strong></p>
// HTML 내용 설정하고 싶다면:
element.innerHTML = "<p>Happy <em>Cat</em></p>";
innerText
innerText 또한 'Element'의 속성이지만, 사용자에게 '보여지는' 텍스트 값만을 가져오거나 설정합니다.
HTML 태그는 무시되고, 순수한 텍스트만을 반환합니다.
또한, display:none 으로 숨겨진 요소의 텍스트나 사용자에게 보이지 않는 텍스트는 반환되지 않습니다.
' '와 같은 연속된 공백은 무시하고 ' ' 하나의 공백만을 처리합니다.
innerText는 사용자가 브라우저에 보이는 텍스트를 '복사하기'해서 클립보드에 복사한 내용을 가져오는 개념과 같습니다!
var element = document.getElementById("testElem");
// 텍스트 내용 가져오기
var textContent = element.innerText;
console.log(textContent); // 출력: Hello World
// 텍스트 내용 설정하고 싶다면
element.innerText = "Happy Cat";
// element.innerText = "Happy Cat"; 해도 똑같은 결과!
innerText vs innerHTML 예시
innerText, innerHTML 차이점이 아직 알쏭달쏭 하시다면, 아래 코드를 생각해 보세요:
// '<div style='background-color:yellow'> </div>' 을 넣을 때의 차이는 무엇일까?
const intext = document.getElementById('intext');
intext.innerText = "<div style='background-color:yellow'>innerText</div>";
console.log(intext) // 결과 : <div style='background-color:yellow'>innerText</div>
const inhtml = document.getElementById('inhtml');
inhtml.innerHTML = "<div style='background-color:yellow'>innerHTML</div>";
console.log(inhtml) // 결과 : innerHTML
여기서 innerText는 스타일이 적용되지 않은 기본 폰트로 <div style='background-color:yellow'>innerText</div>를 출력할 것이고,
innerHTML은 스타일이 적용된 노란 하이라이트로 innerHTML이라는 텍스트를 출력할 것입니다.
textContent
textContent 속성은 'Node'의 속성으로, < script > < style > 등의 태그와 상관없이 해당 노드의 텍스트 값을 그대로 읽습니다.
이 속성은 innerText와 달리 CSS 스타일을 무시하고, 모든 텍스트를 가져오기 때문에 숨겨진 요소나 사용자에게 보이지 않는 텍스트도 반환됩니다.
' ' 와 같은 연속된 공백 또한 ' '으로 그대로 표현됩니다.
var element = document.getElementById("testElem");
// 텍스트 내용 가져오기
var textContent = element.textContent;
console.log(textContent); // 출력: Hello World
// 텍스트 내용 설정하고 싶다면 공백 주의!
element.textContent = "Happy Cat";
결론적으로 세 가지 속성은 텍스트 콘텐츠의 내용에 따라서 차이가 나는 것을 기억해야겠습니다.
'Data Science' 카테고리의 다른 글
[Python] 반응형 웹사이트 크롤링 예제 (웹툰, 쇼핑몰) (0) | 2023.06.29 |
---|---|
[데이터분석] 웹 크롤링 파이썬 BeautifulSoup 사용법 (0) | 2023.06.28 |
[Python] 웹개발 Django 프로젝트 시작하기 코드 포함 (0) | 2023.06.25 |
[Django] 파이썬 웹 개발 기초 개념, 장고 프로그래밍 (0) | 2023.06.24 |
Javascript AJAX 예제, 비동기 데이터 불러오기 (전기자동차 데이터 분석 예제) (0) | 2023.06.21 |