웹 사이트를 더욱 인터랙티브하게 만들고 싶다면, 페이지에 표시되는 텍스트나 HTML을 동적으로 변경하는 방법을 반드시 알아야 합니다. 이때 유용하게 쓰이는 것이 바로 innerText와 innerHTML 속성입니다.
이 두 속성을 사용하면 DOM 요소의 텍스트와 HTML 코드를 손쉽게 수정할 수 있습니다. 이 가이드에서는 자바스크립트에서 innerText와 innerHTML을 사용하는 방법을 단계별로 살펴보겠습니다.
자바스크립트 innerHTML이란?
자바스크립트의 innerHTML 속성은 웹 페이지에서 특정 요소의 HTML 내용을 설정하거나 변경하는 기능을 합니다. innerHTML은 HTML DOM(Document Object Model)의 속성으로, 주로 <p> 태그 같은 요소의 내용을 설정하고 수정할 때 많이 사용됩니다.
innerHTML은 다음과 같이 사용할 수 있습니다.
document.getElementById("paragraph").innerHTML = "Career Karma!";이 코드는 id가 "paragraph"인 <p> 요소의 내용을 "Career Karma!"로 변경합니다. 여기서 getElementById() 메서드는 지정한 ID를 기준으로 해당 요소를 찾아옵니다.
브라우저는 페이지가 로드될 때 문서 객체 모델(DOM)을 생성합니다. 이 DOM은 페이지에 표시되는 객체들의 집합이라고 할 수 있습니다.
DOM 덕분에 웹 요소를 변경할 때마다 일일이 HTML 코드를 수정할 필요가 없습니다. DOM과 자바스크립트를 활용하면 현재 세션에서만 적용되는 방식으로 페이지의 모습을 자유롭게 바꿀 수 있습니다.
자바스크립트 innerText란?
자바스크립트의 innerText 속성은 요소의 텍스트 내용을 설정합니다. 하위 요소(descendants)의 내용도 함께 다룰 수 있으며, 하위 요소에는 문단 안에 포함된 <span> 태그 등이 해당됩니다.
innerText의 문법은 innerHTML과 매우 유사합니다.
document.getElementById("element").innerText = "This is a test.";이 코드는 id가 "element"인 요소의 텍스트 값을 "This is a test."로 설정합니다.
브라우저의 개발자 도구 콘솔에서 직접 요소를 선택해 이 메서드들을 테스트해 볼 수 있습니다.
예를 들어 document.getElementsByTagName('p')[0]처럼 선택하면 페이지의 첫 번째 <p> 태그 내용을 변경할 수 있습니다. 단순히 텍스트만 교체하고 싶다면 innerText 속성을 사용하면 됩니다.
인덱스 번호(1)로 두 번째 문단을 선택하면, 해당 문단의 내용이 "This is a test"로 바뀌는 것을 확인할 수 있습니다.
innerHTML과 innerText 실전 예제
이제 실제로 웹 페이지의 텍스트를 변경하는 간단한 프로젝트를 만들어 보겠습니다. HTML 관련 질문 하나를 보여주는 플래시카드 웹 페이지를 만들고, 버튼을 클릭하면 정답이 공개되도록 구현할 것입니다.
1단계: 웹 페이지 만들기
먼저 프런트엔드를 위한 index.html 파일을 작성합니다.
<!DOCTYPE html>
<html>
<head>
<title>HTML Flashcard App</title>
<link rel="stylesheet" href="./styles.css" />
</head>
<body>
<div class="flashcard">
<h2>Does a hyperlink only apply to text?</h2>
<p>The answer will be revealed when you press "Show answer"</p>
<button id="showAnswer">Show answer</button>
<br /> <br />
<div id="showMessage"></div>
</div>
<script src="./scripts.js"></script>
</body>
</html>이 페이지는 세 가지 요소를 담은 컨테이너로 구성됩니다. 첫째, 사용자에게 던지는 질문입니다. 둘째, 정답을 확인하는 방법을 안내하는 메시지입니다. 마지막으로 정답을 공개하는 버튼이 있습니다.
다음으로 styles.css 파일에 CSS 스타일을 추가해 페이지를 좀 더 보기 좋게 꾸며 보겠습니다.
<style>
.flashcard {
margin: auto;
width: 50%;
padding: 50px;
margin-top: 10%;
background-color: lightgreen;
text-align: center;
}
button {
border: none;
background-color: hotpink;
padding: 10px;
border-radius: 10px;
}
</style>스타일을 적용하면 이제 페이지가 훨씬 더 플래시카드답게 보이고, 버튼도 깔끔하게 디자인됩니다.
2단계: 자바스크립트로 텍스트 변경하기
이제 버튼을 클릭했을 때 정답이 공개되도록 만들어 보겠습니다. 먼저 자바스크립트 코드에서 사용할 텍스트 요소와 버튼 요소를 선택합니다. 모든 코드는 scripts.js 파일에 작성합니다.
var answerText = document.querySelector('p');
var button = document.querySelector('button');다음으로 버튼이 클릭되면 정답을 보여주는 자바스크립트 함수를 생성합니다.
function showAnswer() {
answerText.innerText = "No. Hyperlinks can be used on both text and images.";
}버튼 클릭 시 이 함수가 실행되도록 간단한 이벤트 리스너를 등록합니다. 이 리스너는 버튼의 클릭 이벤트를 감지합니다.
button.addEventListener('click', showAnswer);플래시카드 앱의 기본 구현이 완료되었습니다. 웹 페이지에서 "Show answer" 버튼을 클릭하면 문단의 텍스트가 정답으로 변경되는 것을 확인할 수 있습니다.
여기에 innerHTML을 활용하면 앱에 더 많은 기능을 추가할 수 있습니다. 예를 들어 버튼을 클릭한 후 플래시카드 하단에 빨간색 메시지를 표시하고 싶다고 가정해 봅시다. 다음 코드로 구현할 수 있습니다.
var message = document.querySelector('#showMessage');
function showAnswer() {
answerText.innerText = "No. Hyperlinks can be used on both text and images.";
message.innerHTML = "<span style='color:red;'>You have revealed the answer.</span>";
}수정된 showAnswer() 함수와 새로운 querySelector를 적용해 코드를 실행해 보겠습니다.
이번에는 innerHTML 메서드를 사용해 HTML <span> 태그를 페이지에 추가했습니다. 이 태그 덕분에 사용자가 "Show answer" 버튼을 누르면 빨간색으로 표시되는 메시지가 나타납니다.
JavaScript innerText vs innerHTML 비교
innerText와 innerHTML은 모두 태그의 내용에 접근하고 변경할 수 있다는 공통점이 있습니다. 하지만 결정적인 차이가 있습니다.
- innerText: 하위 요소나 여백(공백)을 제외한 순수 텍스트만 반환합니다.
- innerHTML: 하위 요소와 여백을 포함한 전체 내용, 즉 HTML 태그까지 그대로 반환합니다.
따라서 요소의 내용을 단순 텍스트로 확인하고 싶다면 innerText를, 문자열에 포함된 모든 HTML 태그까지 확인하고 싶다면 innerHTML을 사용하는 것이 적절합니다.
요약하자면, innerText는 일반 텍스트를 다룰 때, innerHTML은 HTML 문자열을 다룰 때 사용합니다. 참고로 두 속성 모두 최신 브라우저에서 폭넓게 지원되므로 호환성 걱정 없이 사용할 수 있습니다.
마무리
innerText와 innerHTML 속성은 HTML DOM을 조작하는 강력한 도구입니다. innerText는 여백이나 하위 요소를 제외한 텍스트 내용을 반환하고, innerHTML은 여백과 하위 요소를 포함한 전체 내용을 반환합니다.
마지막으로 도전 과제를 하나 드립니다. 위 코드를 확장해서 버튼을 두 번째로 클릭하면 정답이 다시 숨겨지도록 만들어 보세요. 구현해야 할 동작은 다음과 같습니다.
- 사용자가 버튼을 클릭하면 정답을 숨길 것
- 정답이 표시 중일 때 버튼 텍스트를 "Show answer"에서 "Hide answer"로 변경할 것
- "Hide answer"를 누른 후에도 "You have revealed the answer" 메시지는 유지할 것
자바스크립트 학습에 도움이 되는 더 많은 튜토리얼이 필요하다면, 초보자를 위한 자바스크립트 베스트 튜토리얼 가이드를 확인해 보세요.