Thay đổi nội dung HTML bằng DOM trong JavaScript

JavaScript HTML DOM | by Học Javascript

Trong JavaScript, HTML DOM (Document Object Model) cho phép chúng ta truy cập và thay đổi nội dung trang web một cách linh hoạt. Nhờ vào DOM, chúng ta có thể chỉnh sửa văn bản, cập nhật thuộc tính, thay đổi giao diện và thậm chí tạo nội dung mới mà không cần tải lại trang.

Việc thay đổi nội dung HTML bằng JavaScript là một kỹ thuật quan trọng trong lập trình web, giúp trang web trở nên động và tương tác hơn. Trong bài viết này, chúng ta sẽ khám phá các cách thay đổi nội dung HTML bằng DOM, từ việc cập nhật văn bản, thay đổi thuộc tính, chỉnh sửa CSS cho đến các ví dụ thực tế để áp dụng vào dự án của bạn.

Các cách thay đổi nội dung HTML bằng DOM trong JavaScript

JavaScript cung cấp nhiều cách để thay đổi nội dung của phần tử HTML bằng DOM. Hai phương pháp phổ biến nhất là innerHTML và textContent/innerText. Mỗi phương pháp có cách hoạt động khác nhau và phù hợp với từng trường hợp cụ thể.

Thay đổi nội dung bằng innerHTML

Cú pháp:

element.innerHTML = "Nội dung mới";

Phương thức này thay đổi toàn bộ nội dung bên trong một phần tử HTML, bao gồm cả thẻ HTML nếu có.

Khi nào nên sử dụng innerHTML?

Khi bạn cần thay đổi toàn bộ nội dung của một phần tử HTML.
Khi bạn muốn chèn mã HTML mới vào phần tử.
Lưu ý: innerHTML có thể gây ra vấn đề bảo mật (XSS) nếu nội dung chứa mã JavaScript độc hại.

Ví dụ thực tế:

Thay đổi nội dung một đoạn văn

<p id="demo">Đây là nội dung ban đầu.</p>
<button onclick="changeContent()">Thay đổi nội dung</button>

<script>
  function changeContent() {
    document.getElementById("demo").innerHTML = "Nội dung đã được thay đổi!";
  }
</script>

Kết quả: Khi nhấn vào nút, đoạn văn sẽ hiển thị "Nội dung đã được thay đổi!".

Chèn nội dung HTML vào phần tử

<div id="content"></div>
<button onclick="addHTML()">Thêm nội dung</button>

<script>
  function addHTML() {
    document.getElementById("content").innerHTML = "<h3>Tiêu đề mới</h3><p>Đây là nội dung mới.</p>";
  }
</script>

Kết quả: Khi nhấn nút, thẻ <h3><p> sẽ được thêm vào <div id="content">.

Thay đổi nội dung bằng textContent và innerText

Sự khác biệt giữa textContentinnerText

Thuộc tính Mô tả Có hiển thị nội dung ẩn không? Hỗ trợ HTML?
textContent Lấy hoặc thay đổi nội dung văn bản của phần tử, bao gồm cả nội dung ẩn. Không
innerText Lấy hoặc thay đổi nội dung văn bản nhưng chỉ hiển thị nội dung thực sự nhìn thấy trên trình duyệt. Không Không

Khi nào nên sử dụng textContent hoặc innerText?

  • Dùng textContent khi:
    Cần lấy hoặc thay đổi nội dung văn bản, kể cả nội dung ẩn.
    Muốn tăng hiệu suất vì textContent nhanh hơn.

  • Dùng innerText khi:
    Chỉ muốn lấy hoặc thay đổi nội dung hiển thị trên trang.
    Cần tôn trọng CSS display: none hoặc visibility: hidden.

Ví dụ minh họa

Sử dụng textContent để lấy nội dung ẩn

<p id="text" style="display: none;">Nội dung bị ẩn</p>
<button onclick="showText()">Hiển thị nội dung</button>

<script>
  function showText() {
    alert(document.getElementById("text").textContent);
  }
</script>

Kết quả: Dù đoạn văn bản bị ẩn, khi nhấn nút, alert vẫn hiển thị "Nội dung bị ẩn".

Sử dụng innerText để chỉ lấy nội dung hiển thị

<p id="text" style="display: none;">Nội dung bị ẩn</p>
<button onclick="showText()">Hiển thị nội dung</button>

<script>
  function showText() {
    alert(document.getElementById("text").innerText);
  }
</script>

Kết quả: alert sẽ không hiển thị gì vì đoạn văn bị ẩn.

Thay đổi nội dung văn bản bằng textContent

<p id="demo">Nội dung cũ</p>
<button onclick="changeText()">Thay đổi nội dung</button>

<script>
  function changeText() {
    document.getElementById("demo").textContent = "Nội dung mới!";
  }
</script>

Kết quả: Khi nhấn nút, nội dung của <p> sẽ thay đổi thành "Nội dung mới!".

Thay đổi thuộc tính của phần tử DOM trong JavaScript

Ngoài việc thay đổi nội dung của phần tử HTML, JavaScript cũng cho phép chúng ta thay đổi các thuộc tính của phần tử như src, href, class, id, style, v.v. Có hai cách chính để thực hiện điều này:

  • Sử dụng setAttribute() để thay đổi giá trị thuộc tính.

  • Thay đổi trực tiếp thuộc tính bằng cách gán giá trị mới (element.property).

Thay đổi giá trị thuộc tính với setAttribute()

Cú pháp:

element.setAttribute("attribute", "value");

Phương thức setAttribute() giúp thiết lập hoặc thay đổi giá trị của một thuộc tính bất kỳ của phần tử.

Ví dụ: Thay đổi ảnh hoặc liên kết

Thay đổi ảnh khi nhấn nút

<img id="myImage" src="image1.jpg" width="300">
<button onclick="changeImage()">Đổi ảnh</button>

<script>
  function changeImage() {
    document.getElementById("myImage").setAttribute("src", "image2.jpg");
  }
</script>

Kết quả: Khi nhấn nút, ảnh sẽ thay đổi từ image1.jpg sang image2.jpg.

Thay đổi liên kết khi nhấn nút

<a id="myLink" href="https://www.google.com" target="_blank">Truy cập Google</a>
<button onclick="changeLink()">Thay đổi liên kết</button>

<script>
  function changeLink() {
    document.getElementById("myLink").setAttribute("href", "https://www.bing.com");
  }
</script>

Kết quả: Khi nhấn nút, liên kết sẽ chuyển từ Google sang Bing.

Thay đổi trực tiếp thuộc tính với element.property

Một cách khác để thay đổi thuộc tính là gán trực tiếp giá trị mới cho thuộc tính của phần tử.

Cú pháp:

element.property = "new value";
Ví dụ:
document.getElementById("myImage").src = "image2.jpg";

Đây là cách nhanh hơn và dễ đọc hơn so với setAttribute(), nhưng chỉ hoạt động với một số thuộc tính phổ biến như src, href, id, className, value, style, v.v.

So sánh setAttribute() và element.property

Tiêu chí setAttribute() element.property
Cú pháp element.setAttribute("attr", "value") element.attr = "value"
Linh hoạt Có thể đặt bất kỳ thuộc tính nào, kể cả thuộc tính không chuẩn Chỉ hoạt động với các thuộc tính được hỗ trợ
Hiệu suất Chậm hơn một chút vì phải thao tác với toàn bộ danh sách thuộc tính Nhanh hơn do truy cập trực tiếp
Hỗ trợ dữ liệu Boolean Lưu thuộc tính dưới dạng chuỗi (ví dụ: setAttribute("checked", "true")) Có thể dùng dạng Boolean thực (element.checked = true)

Ví dụ thực tế: So sánh setAttribute() và element.property

Thay đổi ảnh bằng cách gán trực tiếp thuộc tính

<img id="image" src="image1.jpg" width="300">
<button onclick="changeImage()">Đổi ảnh</button>

<script>
  function changeImage() {
    document.getElementById("image").src = "image2.jpg";
  }
</script>

Kết quả: Ảnh sẽ thay đổi sang image2.jpg khi nhấn nút.

Thay đổi màu nền bằng setAttribute()style

<p id="text">Đây là một đoạn văn.</p>
<button onclick="changeColor()">Thay đổi màu</button>

<script>
  function changeColor() {
    document.getElementById("text").setAttribute("style", "color: red; font-size: 20px;");
  }
</script>

Kết quả: Đoạn văn chuyển sang màu đỏ và kích thước chữ lớn hơn khi nhấn nút.

Thay đổi màu nền bằng cách gán trực tiếp

<p id="text2">Đây là một đoạn văn khác.</p>
<button onclick="changeColorDirect()">Thay đổi màu</button>

<script>
  function changeColorDirect() {
    document.getElementById("text2").style.color = "blue";
    document.getElementById("text2").style.fontSize = "20px";
  }
</script>

Kết quả: Đoạn văn sẽ có màu xanh và cỡ chữ lớn hơn khi nhấn nút.

Thay đổi CSS của phần tử bằng DOM trong JavaScript

Trong JavaScript, chúng ta có thể thay đổi giao diện của một phần tử HTML bằng cách:

  • Sử dụng element.style để thay đổi trực tiếp thuộc tính CSS.

  • Sử dụng classList để thêm, xóa hoặc chuyển đổi class của phần tử.

Sử dụng element.style để thay đổi CSS

Cú pháp:

element.style.property = "value";
  • property là thuộc tính CSS cần thay đổi (viết theo kiểu camelCase, ví dụ: backgroundColor thay vì background-color).

  • value là giá trị CSS mới.

Ví dụ: Thay đổi màu sắc, kích thước, font chữ

Thay đổi màu sắc và kích thước chữ của một đoạn văn

<p id="text">Đây là một đoạn văn bản.</p>
<button onclick="changeStyle()">Thay đổi CSS</button>

<script>
  function changeStyle() {
    let element = document.getElementById("text");
    element.style.color = "red"; // Đổi màu chữ thành đỏ
    element.style.fontSize = "20px"; // Tăng kích thước chữ
    element.style.fontWeight = "bold"; // In đậm chữ
  }
</script>

Kết quả: Khi nhấn nút, đoạn văn sẽ chuyển sang màu đỏ, kích thước 20px, và in đậm.

Thay đổi màu nền của một hộp khi nhấn nút

<div id="box" style="width: 100px; height: 100px; background-color: lightblue;"></div>
<button onclick="changeBg()">Đổi màu nền</button>

<script>
  function changeBg() {
    document.getElementById("box").style.backgroundColor = "yellow";
  }
</script>

Kết quả: Khi nhấn nút, màu nền của hộp sẽ chuyển từ xanh nhạt sang vàng.

Sử dụng classList để thay đổi class của phần tử

Thay vì thay đổi từng thuộc tính CSS bằng element.style, chúng ta có thể sử dụng class để áp dụng nhiều quy tắc CSS cùng lúc.

Các phương thức của classList

Phương thức Chức năng
element.classList.add("className") Thêm class mới vào phần tử
element.classList.remove("className") Xóa class khỏi phần tử
element.classList.toggle("className") Bật/tắt class (nếu có thì xóa, nếu không có thì thêm)
element.classList.contains("className") Kiểm tra xem phần tử có class đó không (trả về true hoặc false)

Ví dụ: Khi nào nên sử dụng classList thay vì style

Sử dụng classList.add() để thay đổi kiểu dáng

<style>
  .highlight {
    color: white;
    background-color: red;
    padding: 10px;
    font-weight: bold;
  }
</style>

<p id="text">Đây là một đoạn văn bản.</p>
<button onclick="addClass()">Thêm class</button>

<script>
  function addClass() {
    document.getElementById("text").classList.add("highlight");
  }
</script>

Kết quả: Khi nhấn nút, đoạn văn sẽ có màu trắng, nền đỏ, và in đậm.

Sử dụng classList.toggle() để bật/tắt class

<style>
  .dark-mode {
    background-color: black;
    color: white;
  }
</style>

<p id="modeText">Chế độ sáng</p>
<button onclick="toggleMode()">Chuyển đổi chế độ</button>

<script>
  function toggleMode() {
    let text = document.getElementById("modeText");
    text.classList.toggle("dark-mode");

    // Thay đổi nội dung văn bản dựa trên trạng thái class
    if (text.classList.contains("dark-mode")) {
      text.innerText = "Chế độ tối";
    } else {
      text.innerText = "Chế độ sáng";
    }
  }
</script>

Kết quả: Khi nhấn nút, văn bản sẽ chuyển giữa chế độ sáng và tối.

Sử dụng element.style Sử dụng classList
Khi chỉ thay đổi một hoặc hai thuộc tính CSS. Khi cần thay đổi nhiều thuộc tính cùng lúc.
Khi thuộc tính CSS không được định nghĩa trong file .css. Khi muốn giữ giao diện có tổ chức và dễ quản lý hơn.
Ví dụ: element.style.color = "red"; Ví dụ: element.classList.add("highlight");
Phương pháp Cách sử dụng Khi nào nên dùng?
element.style.property = "value" Thay đổi trực tiếp một thuộc tính CSS. Khi thay đổi một vài thuộc tính CSS riêng lẻ.
element.classList.add("className") Thêm class vào phần tử. Khi muốn áp dụng nhiều thuộc tính CSS đồng thời.
element.classList.remove("className") Xóa class khỏi phần tử. Khi muốn loại bỏ hiệu ứng CSS.
element.classList.toggle("className") Bật/tắt class. Khi muốn chuyển đổi trạng thái (ví dụ: Dark Mode).

Ví dụ thực tế về thay đổi nội dung HTML bằng DOM

Dưới đây là ba ví dụ thực tế về cách thay đổi nội dung trên trang web bằng JavaScript và DOM.

Thay đổi nội dung khi nhấn nút

  • Khi người dùng nhấn vào nút, nội dung của đoạn văn bản sẽ thay đổi.

Cách làm:

  • Sử dụng document.getElementById("id").innerHTML để thay đổi nội dung.

Ví dụ:

<p id="text">Đây là đoạn văn bản ban đầu.</p>
<button onclick="changeText()">Nhấn để thay đổi nội dung</button>

<script>
  function changeText() {
    document.getElementById("text").innerHTML = "Nội dung đã được thay đổi!";
  }
</script>

Kết quả: Khi nhấn vào nút, đoạn văn sẽ hiển thị "Nội dung đã được thay đổi!".

Hiển thị thời gian hiện tại bằng DOM

Yêu cầu:

  • Hiển thị thời gian hiện tại của hệ thống.

  • Cập nhật thời gian mỗi giây.

Cách làm:

  • Sử dụng new Date() để lấy thời gian.

  • Dùng setInterval() để cập nhật thời gian liên tục.

Ví dụ:

<p>Thời gian hiện tại: <span id="clock"></span></p>

<script>
  function updateClock() {
    let now = new Date();
    let timeString = now.toLocaleTimeString(); // Lấy giờ, phút, giây dạng HH:MM:SS
    document.getElementById("clock").innerHTML = timeString;
  }

  setInterval(updateClock, 1000); // Cập nhật mỗi giây
  updateClock(); // Gọi ngay lần đầu tiên để hiển thị ngay lập tức
</script>

Kết quả: Hiển thị giờ hiện tại và tự động cập nhật mỗi giây.

Chỉnh sửa nội dung input và hiển thị kết quả

Yêu cầu:

  • Khi người dùng nhập văn bản vào ô input, nội dung đó sẽ tự động hiển thị ngay bên dưới.

Cách làm:

  • Lắng nghe sự kiện oninput để cập nhật nội dung theo thời gian thực.

Ví dụ:

<label for="userInput">Nhập nội dung: </label>
<input type="text" id="userInput" oninput="updateText()">
<p>Kết quả: <span id="output"></span></p>

<script>
  function updateText() {
    let inputText = document.getElementById("userInput").value;
    document.getElementById("output").innerHTML = inputText;
  }
</script>

Kết quả: Khi người dùng nhập vào ô input, văn bản sẽ được hiển thị ngay bên dưới mà không cần nhấn nút.

Kết bài

Việc thay đổi nội dung HTML bằng DOM trong JavaScript là một kỹ thuật quan trọng giúp tạo ra các trang web động và tương tác tốt hơn với người dùng. Bằng cách sử dụng các phương thức như innerHTML, textContent, setAttribute(), và các sự kiện như onclick, oninput, chúng ta có thể dễ dàng cập nhật nội dung trang web mà không cần tải lại.

Qua các ví dụ thực tế, bạn đã thấy cách thay đổi nội dung khi nhấn nút, hiển thị thời gian theo thời gian thực, và cập nhật nội dung nhập vào từ ô input. Những kỹ thuật này rất hữu ích trong phát triển web, giúp cải thiện trải nghiệm người dùng và tối ưu hóa hiệu suất trang web.

Bài viết liên quan