HTML 5 đã giới thiệu <template>phần tử có thể được sử dụng cho mục đích này (như được mô tả trong thông số WhatWG và tài liệu MDN ).
Một <template>phần tử được sử dụng để khai báo các đoạn HTML có thể được sử dụng trong các tập lệnh. Phần tử được biểu diễn trong DOM dưới dạng HTMLTemplateElementcó .contentthuộc tính DocumentFragmentloại, để cung cấp quyền truy cập vào nội dung của mẫu. Đây có nghĩa là bạn có thể chuyển đổi một chuỗi HTML để phần tử DOM bằng cách thiết lập innerHTMLcủa một <template>phần tử, sau đó đạt vào template's .contenttài sản.
Ví dụ:
/**
* @param {String} HTML representing a single element
* @return {Element}
*/
function htmlToElement(html) {
var template = document.createElement('template');
html = html.trim(); // Never return a text node of whitespace as the result
template.innerHTML = html;
return template.content.firstChild;
}
var td = htmlToElement('<td>foo</td>'),
div = htmlToElement('<div><span>nested</span> <span>stuff</span></div>');
/**
* @param {String} HTML representing any number of sibling elements
* @return {NodeList}
*/
function htmlToElements(html) {
var template = document.createElement('template');
template.innerHTML = html;
return template.content.childNodes;
}
var rows = htmlToElements('<tr><td>foo</td></tr><tr><td>bar</td></tr>');
Lưu ý rằng các cách tiếp cận tương tự sử dụng một yếu tố chứa khác nhau, chẳng hạn nhưdiv không hoạt động. HTML có các hạn chế về loại phần tử nào được phép tồn tại bên trong loại phần tử khác; ví dụ, bạn không thể đặt con tdlà con trực tiếp của a div. Điều này làm cho các phần tử này biến mất nếu bạn cố gắng đặt phần innerHTMLtử divchứa chúng. Vì <template>không có hạn chế nào đối với nội dung của chúng, thiếu sót này không áp dụng khi sử dụng mẫu.
Tuy nhiên, templatekhông được hỗ trợ trong một số trình duyệt cũ. Kể từ tháng 1 năm 2018, tôi có thể sử dụng ... ước tính 90% người dùng trên toàn cầu đang sử dụng trình duyệt hỗ trợ templates . Đặc biệt, không có phiên bản Internet Explorer nào hỗ trợ chúng; Microsoft đã không thực hiện templatehỗ trợ cho đến khi phát hành Edge.
Nếu bạn đủ may mắn để viết mã chỉ nhắm mục tiêu vào người dùng trên các trình duyệt hiện đại, hãy tiếp tục và sử dụng chúng ngay bây giờ. Nếu không, bạn có thể phải đợi một lúc để người dùng bắt kịp.