JS LAB
JS 4.3 · 4부. 브라우저와 DOM

내용과 속성 바꾸기

textContent 와 속성으로 화면의 내용을 바꿉니다.

예상 학습 시간 14분 실행 단추가 있는 예제는 고쳐서 실행해 볼 수 있습니다 난이도 초급
개념 설명

찾았으면 바꿉니다

앞 단원에서 찾은 요소는 객체입니다(3.6). 속성을 읽고 쓰면 화면이 그 자리에서 바뀝니다.

  • textContent — 그 안의 글자입니다.
  • innerHTML — 그 안의 마크업입니다. 주의가 필요합니다.
  • getAttribute · setAttribute — 태그에 적는 속성입니다.
최소 예제 · 편집 가능

글자 바꾸기

실행한 뒤 미리보기 탭을 열어 보세요. 화면의 글자가 바뀌어 있습니다.

script.js
const title = document.querySelector("#title");

console.log(title.textContent);

title.textContent = "바뀐 제목";

console.log(title.textContent);
출력
원래 제목 바뀐 제목

읽는 것과 쓰는 것이 같은 이름입니다. = 의 왼쪽에 두면 쓰기, 오른쪽에 두면 읽기입니다.

상세 사용법

textContent 와 innerHTML 의 차이

script.js
const a = document.querySelector("#a");
const b = document.querySelector("#b");

a.textContent = "<b>굵게</b>";
b.innerHTML = "<b>굵게</b>";

console.log(a.textContent);
console.log(b.textContent);
출력
<b>굵게</b> 굵게

미리보기를 열어 보면 위는 태그가 글자 그대로 보이고, 아래는 태그로 읽혀 굵게 보입니다.

사용자가 입력한 값에는 innerHTML 을 사용하지 않습니다. 입력한 글에 태그가 섞여 있으면 그것이 그대로 살아나기 때문입니다. 글자를 넣을 때는 언제나 textContent 입니다.

상세 사용법

속성 읽고 쓰기

script.js
const link = document.querySelector("#link");
const photo = document.querySelector("#photo");

console.log(link.getAttribute("href"));

link.setAttribute("href", "/new");
console.log(link.getAttribute("href"));

console.log(photo.getAttribute("alt"));
console.log(photo.hasAttribute("title"));
출력
/old /new 사진 false

자주 쓰는 속성은 점으로도 읽고 씁니다 — input.value, img.src. 다만 값이 다듬어져 나오는 것이 있어 적은 그대로가 필요하면 getAttribute 를 사용합니다.

상세 사용법

data- 속성

이름을 data- 로 시작하면 마음대로 만들어 붙일 수 있습니다. 화면에 보이지 않는 값을 요소에 붙여 둘 때 사용합니다.

script.js
const buy = document.querySelector("#buy");

console.log(buy.dataset.productId);
console.log(buy.dataset.price);
console.log(typeof buy.dataset.price);
출력
A-100 1500 string

data-product-iddataset.productId 로 읽습니다. 하이픈이 사라지고 다음 글자가 대문자가 됩니다. 값은 언제나 글자이므로 계산에 쓰려면 Number 로 바꿔야 합니다(1.4).

흔한 실수

처음에 자주 걸리는 것

1. 사용자 입력에 innerHTML 을 사용합니다

입력한 글에 태그가 섞이면 그대로 살아납니다. 남의 코드가 내 화면에서 실행되는 통로가 됩니다. 글자를 넣을 때는 textContent 입니다.

box.innerHTML = 입력값;      // 위험합니다
box.textContent = 입력값;    // 이렇게 적습니다
2. innerHTML 에 += 를 사용합니다

안의 내용을 통째로 다시 만듭니다. 붙여 둔 이벤트가 사라지고 느립니다. 요소를 더할 때는 4.6 의 방법을 사용합니다.

3. dataset 값을 숫자로 압니다

언제나 글자입니다. dataset.price + 100"1500100" 이 됩니다(1.4).

실습 문제

직접 해보기

1. 제목 뒤에 글자 붙이기 난이도 하

제목의 글자 뒤에 " (수정됨)" 을 붙여 화면에 반영하세요. 원래 글자를 지우면 안 됩니다.

const title = document.querySelector("#title"); title.textContent = title.textContent + " (수정됨)"; console.log(title.textContent);
2. 값을 읽어 계산하기 난이도 중

단추의 data-price 를 읽어 10% 할인한 금액을 출력하세요.

dataset 값은 글자입니다. 계산 전에 숫자로 바꿔야 합니다.
const buy = document.querySelector("#buy"); const price = Number(buy.dataset.price); console.log(Math.floor(price * 0.9));
요약

이 단원의 정리

  • textContent 로 글자를 읽고 씁니다. 화면이 그 자리에서 바뀝니다.
  • innerHTML 은 태그로 읽습니다. 사용자 입력에는 사용하지 않습니다.
  • 속성은 getAttribute · setAttribute 로 다룹니다.
  • data- 로 시작하는 속성은 dataset 으로 읽습니다.
  • dataset 값은 언제나 글자입니다.