0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Sự Khác Biệt Giữa innerText, innerHTML và textContent

Đăng vào 7 tháng trước

• 3 phút đọc

Giới Thiệu

Khi làm việc với JavaScript, bạn có thể đã nghe nói đến ba thuộc tính phổ biến: innerText, innerHTML, và textContent. Mặc dù chúng có vẻ tương tự, nhưng chúng lại hoạt động theo những cách khác nhau. Trong bài viết này, chúng ta sẽ cùng tìm hiểu chi tiết về từng thuộc tính này và cách sử dụng chúng trong lập trình web.

Nội Dung Chính

innerText

Định Nghĩa

innerText trả về văn bản mà người dùng có thể nhìn thấy trên màn hình. Nó ẩn đi những phần tử không hiển thị (như các phần tử có thuộc tính display: none) và tôn trọng các ngắt dòng cũng như định dạng văn bản.

Ví Dụ

html Copy
<div id="demo1">Hello <span style="display:none;">Hidden</span> World</div>
javascript Copy
const result = document.getElementById("demo1").innerText;
console.log(result); // Kết quả: "Hello World"

Lưu Ý

  • Nếu bạn chỉ cần văn bản hiển thị, hãy sử dụng innerText.
  • innerText có thể ảnh hưởng đến hiệu suất nếu được gọi nhiều lần trong một đoạn mã lớn.

innerHTML

Định Nghĩa

innerHTML cho phép bạn lấy toàn bộ nội dung bên trong một phần tử — không chỉ văn bản mà còn cả các thẻ HTML.

Ví Dụ

html Copy
<div id="demo2">Hello <strong>World</strong></div>
javascript Copy
const result = document.getElementById("demo2").innerHTML;
console.log(result); // Kết quả: "Hello <strong>World</strong>"

Lưu Ý

  • Sử dụng innerHTML khi bạn cần lấy hoặc thiết lập mã HTML.
  • Cẩn thận với các lỗ hổng bảo mật như XSS khi sử dụng innerHTML.

textContent

Định Nghĩa

textContent trả về toàn bộ văn bản, bao gồm cả văn bản từ các phần tử ẩn — nhưng không bao gồm bất kỳ thẻ HTML nào.

Ví Dụ

html Copy
<div id="demo3">Hello <span style="display:none;">Hidden</span> World</div>
javascript Copy
const result = document.getElementById("demo3").textContent;
console.log(result); // Kết quả: "Hello Hidden World"

Lưu Ý

  • Sử dụng textContent khi bạn muốn lấy toàn bộ văn bản, kể cả văn bản ẩn.
  • textContent nhanh hơn và an toàn hơn so với innerHTML vì không có rủi ro về bảo mật.

Nên Sử Dụng Cái Nào?

  • Sử dụng innerText khi bạn chỉ cần văn bản hiển thị trên trang.
  • Sử dụng innerHTML nếu bạn cần thao tác với mã HTML.
  • Sử dụng textContent khi bạn muốn lấy văn bản thuần túy, bao gồm cả văn bản ẩn.

Thực Hành Tốt Nhất

  • Tối ưu hóa hiệu suất: Tránh gọi các thuộc tính này nhiều lần trong vòng lặp. Hãy lưu trữ kết quả trong một biến nếu bạn cần sử dụng chúng nhiều lần.
  • Bảo mật: Tránh sử dụng innerHTML với dữ liệu không đáng tin cậy để ngăn chặn các lỗ hổng bảo mật.

Cạm Bẫy Thường Gặp

  • Hiểu sai về sự khác biệt: Nhiều lập trình viên mới thường nhầm lẫn giữa ba thuộc tính này, dẫn đến các lỗi không mong muốn trong ứng dụng.
  • Không xử lý các trường hợp đặc biệt: Đảm bảo xử lý các tình huống khi không có nội dung hoặc khi phần tử không tồn tại.

Mẹo Hiệu Suất

  • Sử dụng textContent khi có thể, vì nó nhanh hơn và ít tốn tài nguyên hơn.
  • Tránh cập nhật DOM nhiều lần. Thay vào đó, hãy cập nhật nội dung một lần duy nhất để giảm thiểu tác động đến hiệu suất.

Giải Quyết Sự Cố

  • Nếu bạn gặp vấn đề với việc không lấy được văn bản đúng cách, hãy kiểm tra thuộc tính CSS của phần tử để đảm bảo nó không bị ẩn.
  • Sử dụng công cụ phát triển (Developer Tools) để kiểm tra cấu trúc DOM và xác định vấn đề.

Kết Luận

Việc hiểu rõ sự khác biệt giữa innerText, innerHTML, và textContent là rất quan trọng để xây dựng ứng dụng web hiệu quả và an toàn. Hãy chọn thuộc tính phù hợp với nhu cầu của bạn và luôn chú ý đến hiệu suất và bảo mật. Nếu bạn có bất kỳ câu hỏi nào, hãy để lại ý kiến bên dưới!

Câu Hỏi Thường Gặp (FAQ)

1. innerText có ảnh hưởng đến hiệu suất không?
Có, nếu gọi nhiều lần trong vòng lặp lớn có thể làm chậm hiệu suất.

2. Tôi có thể sử dụng innerHTML với dữ liệu từ người dùng không?
Không, bạn nên tránh để ngăn chặn các lỗ hổng bảo mật như XSS.

3. textContent có nhanh hơn innerHTML không?
Có, textContent nhanh hơn và an toàn hơn vì không xử lý thẻ HTML.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào