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 HTMLTemplateElement
có .content
thuộc tính DocumentFragment
loạ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 innerHTML
của một <template>
phần tử, sau đó đạt vào template
's .content
tà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 td
là 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 innerHTML
tử div
chứ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, template
khô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ợ template
s . Đặ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 template
hỗ 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.