Logo InterData
  • Trang chủ
  • Blog
    • Máy chủ (Server)
    • Máy chủ ảo (VPS)
    • Cloud Server
    • Web Hosting
    • Website
    • Trí tuệ nhân tạo (AI)
    • Lập trình
  • Dịch vụ
    • Thuê chỗ đặt máy chủ
    • Thuê Cloud Server
    • Thuê Hosting
    • Thuê máy chủ
    • Thuê VPS
  • Sự kiện
  • Khuyến Mãi
  • Trang chủ
  • Blog
    • Máy chủ (Server)
    • Máy chủ ảo (VPS)
    • Cloud Server
    • Web Hosting
    • Website
    • Trí tuệ nhân tạo (AI)
    • Lập trình
  • Dịch vụ
    • Thuê chỗ đặt máy chủ
    • Thuê Cloud Server
    • Thuê Hosting
    • Thuê máy chủ
    • Thuê VPS
  • Sự kiện
  • Khuyến Mãi
Trang Chủ Lập trình

Hàm .html() trong jQuery: Cách dùng, Ví dụ & Lỗi thường gặp

Trương Trường Thịnh Được viết bởi Trương Trường Thịnh
A A

NỘI DUNG

Toggle
  • Hàm .html() trong jQuery là gì?
  • Khi nào cần sử dụng hàm .html()
  • Cách sử dụng .html() trong jQuery
    • Lấy nội dung HTML (Getter)
    • Gán/Thay thế nội dung HTML (Setter)
  • So sánh .html() với .text() và .val()
    • Bảng so sánh nhanh
    • Khi nào dùng cái nào?
  • Một số lỗi thường gặp khi dùng .html() và cách xử lý
    • Lỗi cú pháp HTML
    • Script không được thực thi
    • Lỗi tải thư viện jQuery
    • Khó quản lý chuỗi HTML lớn
    • Thao tác trên phần tử không tồn tại
    • Lỗ hổng bảo mật XSS
  • Ví dụ thực tế dùng .html() trong jQuery
    • Xây dựng chức năng Tab Content
  • Một số câu hỏi liên quan
    • Dùng .html() để chèn thêm nội dung được không?
    • Làm thế nào để xóa toàn bộ nội dung của một phần tử?
    • Tại sao nên dùng .text() thay vì .html() khi hiển thị dữ liệu từ người dùng?

Thao tác với Document Object Model (DOM) là một kỹ năng cốt lõi trong lập trình front-end. Hàm .html() của jQuery cung cấp một phương pháp mạnh mẽ để đọc và ghi nội dung trực tiếp vào các phần tử, giúp bạn cập nhật giao diện người dùng một cách linh hoạt. Bài viết này sẽ hướng dẫn chi tiết cách sử dụng, so sánh với các hàm liên quan, chỉ ra lỗi thường gặp và cách khắc phục chúng.

Hàm .html() trong jQuery là gì?

Hàm .html() là một phương thức tích hợp sẵn trong thư viện jQuery. Chức năng chính của hàm này là tương tác với nội dung HTML bên trong các phần tử được chọn. Bạn có thể dùng .html() theo hai cách: lấy nội dung hiện tại hoặc thiết lập một nội dung mới, bao gồm cả các thẻ HTML.

Khi bạn sử dụng .html() để lấy dữ liệu, nó sẽ trả về nội dung HTML của phần tử đầu tiên khớp với bộ chọn (selector). Ngược lại, khi bạn dùng để gán dữ liệu, nó sẽ cập nhật nội dung cho TẤT CẢ các phần tử khớp với bộ chọn đó. Đây là một điểm khác biệt quan trọng cần ghi nhớ.

Hàm .html() trong jQuery

Khi nào cần sử dụng hàm .html()

Việc hiểu đúng thời điểm sử dụng .html() giúp mã của bạn sạch sẽ và hiệu quả hơn. Hãy dùng phương thức này trong các trường hợp cụ thể sau:

  • Đọc cấu trúc HTML con: Khi bạn cần lấy toàn bộ cây HTML bên trong một phần tử, bao gồm tất cả các thẻ, thuộc tính và văn bản.
  • Thay thế hoàn toàn nội dung: Khi bạn muốn cập nhật một vùng nội dung bằng một khối HTML hoàn toàn mới, ví dụ như tải kết quả tìm kiếm vào một div hiển thị.
  • Xóa sạch nội dung một phần tử: Bằng cách gán một chuỗi rỗng (''), bạn có thể nhanh chóng loại bỏ tất cả các phần tử con bên trong một selector.

Cách sử dụng .html() trong jQuery

Cú pháp của .html() rất đơn giản và linh hoạt, tùy thuộc vào việc bạn muốn đọc hay ghi dữ liệu. Dưới đây là cách triển khai cho từng mục đích.

Hàm .html() trong jQuery

Lấy nội dung HTML (Getter)

Để lấy nội dung, bạn chỉ cần gọi hàm mà không truyền bất kỳ tham số nào. jQuery sẽ trả về một chuỗi chứa đựng toàn bộ HTML bên trong phần tử đầu tiên mà nó tìm thấy.

<!-- File HTML -->
<div id="user-profile">
    <h3>John Doe</h3>
    <p>Web Developer</p>
</div>

<button id="get-data-btn">Lấy Dữ Liệu</button>
```javascript
// File JavaScript
$('#get-data-btn').on('click', function() {
    // Lấy nội dung HTML từ div có id là user-profile
    const profileContent = $('#user-profile').html();

    // Hiển thị kết quả trong console
    console.log(profileContent);
    // Kết quả: "<h3>John Doe</h3>\n    <p>Web Developer</p>"
});

Gán/Thay thế nội dung HTML (Setter)

Để gán nội dung, bạn truyền một chuỗi chứa mã HTML làm tham số cho hàm. Thao tác này sẽ xóa bỏ hoàn toàn nội dung cũ và thay thế bằng nội dung mới bạn cung cấp.

<!-- File HTML -->
<div id="product-info">
    <p>Vui lòng chọn một sản phẩm để xem chi tiết.</p>
</div>

<button id="update-data-btn">Cập Nhật Sản Phẩm</button>
```javascript
// File JavaScript
$('#update-data-btn').on('click', function() {
    const newProductHTML = '<h2>Laptop Pro 2025</h2><p>Giá: 30,000,000 VNĐ</p>';

    // Gán nội dung HTML mới vào div có id là product-info
    $('#product-info').html(newProductHTML);
});

So sánh .html() với .text() và .val()

Người mới bắt đầu thường nhầm lẫn giữa ba phương thức .html(), .text() và .val(). Việc phân biệt rõ chúng là rất quan trọng để tránh các lỗi logic không đáng có.

Bảng so sánh nhanh

Bảng dưới đây tóm tắt những khác biệt chính giữa ba phương thức:

Phương thức Chức năng Ví dụ sử dụng
.html() Lấy hoặc gán nội dung, bao gồm cả các thẻ HTML. $('#myDiv').html('<b>Hey</b>');
.text() Chỉ lấy hoặc gán nội dung dạng văn bản thuần túy, loại bỏ thẻ HTML. $('#myDiv').text('<b>Hey</b>');
.val() Lấy hoặc gán giá trị (value) của các phần tử trong form. $('#myInput').val('Hello');

Khi nào dùng cái nào?

  • Dùng .html() khi bạn cần thao tác với cấu trúc HTML.
  • Dùng .text() khi bạn chỉ quan tâm đến văn bản và muốn đảm bảo an toàn, vì nó tự động loại bỏ các thẻ HTML nguy hiểm.
  • Dùng .val() riêng cho các thẻ input, textarea, select, và button để làm việc với thuộc tính value.

Một số lỗi thường gặp khi dùng .html() và cách xử lý

Dù mạnh mẽ, .html() cũng tiềm ẩn nhiều lỗi nếu sử dụng không cẩn thận. Dưới đây là các vấn đề phổ biến và hướng giải quyết.

Hàm .html() trong jQuery

Lỗi cú pháp HTML

Gán một chuỗi HTML bị sai cú pháp, như thiếu thẻ đóng hoặc sai dấu ngoặc, sẽ khiến trình duyệt không thể hiển thị đúng. Giải pháp: Hãy kiểm tra kỹ chuỗi HTML trước khi gán. Sử dụng Template Literals (dấu `) trong JavaScript ES6 giúp việc viết chuỗi HTML nhiều dòng trở nên dễ đọc và ít lỗi hơn.

Script không được thực thi

Vì lý do bảo mật, jQuery sẽ loại bỏ các thẻ <script> khi bạn chèn chúng bằng .html(). Đoạn mã script đó sẽ không được thực thi. Giải pháp: Đây là một tính năng an toàn. Nếu thực sự cần chạy script, bạn nên chèn mã vào DOM theo một cách khác hoặc thực thi logic JavaScript sau khi đã chèn HTML xong.

Lỗi tải thư viện jQuery

Nếu bạn thấy lỗi $ is not defined hoặc jQuery is not defined trong console, điều này có nghĩa là thư viện jQuery chưa được tải, hoặc script của bạn đã chạy trước khi jQuery sẵn sàng. Giải pháp: Luôn đảm bảo bạn đã nhúng file jQuery vào thẻ <head> hoặc trước thẻ </body> và file script của bạn được đặt sau nó.

Khó quản lý chuỗi HTML lớn

Việc tạo một chuỗi HTML phức tạp và dài bằng cách nối chuỗi (+) rất khó đọc và bảo trì. Giải pháp: Thay vì nối chuỗi, hãy sử dụng Template Literals hoặc định nghĩa cấu trúc HTML mẫu trong một thẻ <template> rồi dùng .clone() để tái sử dụng.

Thao tác trên phần tử không tồn tại

Nếu bộ chọn (selector) của bạn không tìm thấy bất kỳ phần tử nào, việc gọi .html() sẽ không gây ra lỗi nhưng cũng không có tác dụng gì. Giải pháp: Trước khi thao tác, bạn có thể kiểm tra xem phần tử có tồn tại không bằng cách kiểm tra thuộc tính length: if ($('#myElement').length) { ... }.

Lỗ hổng bảo mật XSS

Đây là lỗi nghiêm trọng nhất. Theo thống kê của OWASP (Open Web Application Security Project), Cross-Site Scripting (XSS) luôn là một trong những lỗ hổng web hàng đầu. Nếu bạn dùng .html() để hiển thị dữ liệu do người dùng nhập mà không xử lý, kẻ xấu có thể chèn mã độc để đánh cắp thông tin. Giải pháp: Không bao giờ dùng .html() để hiển thị dữ liệu từ người dùng. Thay vào đó, hãy luôn sử dụng .text(). Phương thức này sẽ tự động chuyển các ký tự đặc biệt thành dạng an toàn, vô hiệu hóa mọi thẻ HTML.

Ví dụ thực tế dùng .html() trong jQuery

Hãy xem xét một ví dụ thực tế hơn: xây dựng một tab chuyển đổi nội dung đơn giản. Khi người dùng nhấp vào một tab, nội dung tương ứng sẽ được tải vào một vùng chứa.

Xây dựng chức năng Tab Content

<!-- Cấu trúc HTML -->
<ul class="tabs">
    <li data-content="<h2>Nội dung Tab 1</h2><p>Đây là chi tiết của tab 1.</p>">Tab 1</li>
    <li data-content="<h2>Nội dung Tab 2</h2><p>Đây là chi tiết của tab 2, phức tạp hơn một chút.</p>">Tab 2</li>
</ul>
<div id="tab-content" style="border:1px solid #ccc; padding:10px; margin-top:10px;">
    Bấm vào một tab để xem nội dung.
</div>

<style>
    .tabs li { display: inline-block; padding: 10px; cursor: pointer; background-color: #f0f0f0; }
    .tabs li.active { background-color: #ccc; }
</style>
```javascript
// Mã jQuery
$('.tabs li').on('click', function() {
    // Lấy đối tượng li đang được click
    const clickedTab = $(this);

    // Lấy nội dung từ thuộc tính data-content
    const contentToShow = clickedTab.data('content');

    // Cập nhật nội dung cho div#tab-content
    $('#tab-content').html(contentToShow);

    // Cập nhật giao diện cho tab đang active
    $('.tabs li').removeClass('active');
    clickedTab.addClass('active');
});

Ví dụ này cho thấy cách .html() có thể được sử dụng để cập nhật một phần của trang một cách linh hoạt mà không cần tải lại toàn bộ trang, tạo ra trải nghiệm người dùng tốt hơn.

Một số câu hỏi liên quan

Dùng .html() để chèn thêm nội dung được không?

Không. Hàm .html() được thiết kế để thay thế hoàn toàn nội dung. Nếu bạn muốn chèn thêm nội dung mà không xóa nội dung cũ, hãy sử dụng các phương thức .append() (chèn vào cuối) hoặc .prepend() (chèn vào đầu).

Làm thế nào để xóa toàn bộ nội dung của một phần tử?

Bạn có hai cách hiệu quả. Cách thứ nhất là sử dụng $('#myElement').html(''). Cách thứ hai, được khuyến khích hơn vì rõ ràng về mặt ngữ nghĩa, là sử dụng phương thức .empty(), tức là $('#myElement').empty().

Tại sao nên dùng .text() thay vì .html() khi hiển thị dữ liệu từ người dùng?

Để phòng chống tấn công Cross-Site Scripting (XSS). Hàm .text() sẽ diễn dịch mọi thứ thành văn bản thuần túy, vô hiệu hóa các thẻ HTML và mã JavaScript độc hại. Đây là một quy tắc vàng trong thực hành lập trình web an toàn.

Việc nắm vững .html() và các phương thức liên quan giúp bạn kiểm soát DOM hiệu quả. Khi xây dựng các ứng dụng web phức tạp, một nền tảng máy chủ mạnh mẽ là điều cần thiết để đảm bảo hiệu suất.

Tham khảo dịch vụ thuê máy chủ ảo SSD (VPS SSD) giá rẻ – Hiệu năng cao tại InterData để tối ưu hóa hiệu suất cho dự án của bạn.

Share188Tweet117
KHUYẾN MÃI NỔI BẬT
Deal mát át nắng hè
DEAL MÁT ÁT NẮNG HÈ – TIẾT KIỆM ĐẾN 80%
BÀI VIẾT MỚI NHẤT
Syntax Error Là Gì, Nguyên Nhân & Cách Khắc Phục Lỗi Cú Pháp Hiệu Quả
Syntax Error Là Gì? Nguyên Nhân & Cách Khắc Phục Lỗi Cú Pháp Hiệu Quả
Hàm .val() trong jQuery
Hàm .val() trong jQuery là gì? Cách Sử Dụng & Ví Dụ
Nên học JavaScript hay jQuery
Nên học JavaScript hay jQuery? Phân tích chi tiết
Hiệu ứng xoay vòng jQuery
Hướng Dẫn Tạo Hiệu Ứng Xoay Vòng jQuery (Slider/Carousel)
Serverless Là Gì - Toàn Tập Về Điện Toán Phi Máy Chủ Từ A-Z
Serverless Là Gì? Toàn Tập Về Điện Toán Phi Máy Chủ Từ A-Z
CLI là gì, Cách hoạt động & Khi nào dùng Command Line Interface
CLI là gì? Khi nào dùng & Cách hoạt động Command Line Interface
Hàm .find() trong jQuery
Hàm .Find() trong jQuery: Cách dùng, Ví Dụ & Lỗi Thường Gặp
Bắt lỗi form bằng jQuery
Hướng Dẫn Bắt Lỗi Form bằng jQuery từ A-Z (Kèm Code Mẫu)
Top 8 công ty thiết kế web uy tín tại TPHCM
Top 7 công ty thiết kế web uy tín tại TPHCM bạn không nên bỏ qua

logo interdata

VPĐD: 240 Nguyễn Đình Chính, P.11. Q. Phú Nhuận, TP. Hồ Chí Minh
VPGD: 211 Đường số 5, Lakeview City, An Phú, Thủ Đức, TP. Hồ Chí Minh
MST: 0316918910 – Cấp ngày 28/06/2021 – tại Sở KH và ĐT TP. HCM
Mã ĐDKD: 0001
Điện thoại: 1900.636822
Website: Interdata.vn

DỊCH VỤ

Thuê chỗ đặt máy chủ
Thuê Cloud Server
Thuê Hosting
Thuê máy chủ
Thuê VPS

THÔNG TIN

Blog
Giới thiệu
Liên hệ
Khuyến mãi
Sự kiện

CHÍNH SÁCH

Chính sách bảo hành
Chính sách bảo mật
Chính sách xử lý khiếu nại
Cam kết dịch vụ
Điều khoản sử dụng
GDPR
Hình thức thanh toán
Hướng dẫn thanh toán trên VNPAY
Quy định đổi trả và hoàn trả tiền
Quy định sử dụng tên miền