Làm cách nào để viết HTML trong chuỗi JavaScript?

Hôm qua, tôi đã viết về Reef, giải pháp thay thế nhẹ nhàng của tôi cho Vue và React. Trong vài ngày tới, tôi muốn xem các bộ phận khác nhau của nó hoạt động như thế nào

Hôm nay, chúng ta sẽ xem xét cách lấy một chuỗi HTML và chuyển đổi nó thành đánh dấu thực tế

Tại sao bạn cần điều này

Nếu bạn muốn chèn một chuỗi vào DOM, bạn có thể làm điều đó khá đơn giản với

<h1>Hi, universe!h1>
0

app.innerHTML = '

Hello, world!

'
;

Nhưng Reef không chỉ đẩy đánh dấu vào một yếu tố. Nó so sánh đánh dấu hiện có trong một phần tử với giao diện của nó và chỉ cập nhật những thứ cần thay đổi

Ví dụ: nếu nội dung hiện có bên trong

<h1>Hi, universe!h1>
0 là

<h1>Hi, universe!h1>

Reef sẽ chỉ cập nhật văn bản bên trong

<h1>Hi, universe!h1>
1 thay vì tạo một phần tử hoàn toàn mới

Để điều đó hoạt động, chúng tôi cần chuyển đổi các chuỗi HTML thành các phần tử HTML thực tế có thể được duyệt qua, ánh xạ và phân tích

Tạo một phương thức trợ giúp

Trước tiên, hãy tạo một hàm trợ giúp sẽ chấp nhận một chuỗi và trả về HTML

/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	// Code goes here...
};

cách tiếp cận đơn giản

Cách đơn giản nhất để làm điều này là tạo một phần tử, chèn chuỗi vào với

<h1>Hi, universe!h1>
0, sau đó trả về phần tử

/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};

Cách tiếp cận này không hoàn hảo, mặc dù

Mặc dù phần tử này bị tách rời—nghĩa là không thực sự nằm trong DOM hiện tại—trình duyệt vẫn sẽ thực hiện những việc như tải xuống các tệp hình ảnh

Thao tác này sẽ kích hoạt tệp hình ảnh để tải xuống, mặc dù phần đánh dấu chưa được hiển thị ở bất kỳ đâu

stringToHTML('
Làm cách nào để viết HTML trong chuỗi JavaScript?
'
);

Một cách tốt hơn

Sau khi thực hiện một loạt nghiên cứu, tôi đã phát hiện ra một phương pháp trình duyệt riêng để tránh vấn đề này.

<h1>Hi, universe!h1>
3. Đối tượng
<h1>Hi, universe!h1>
3 tạo một tài liệu DOM mới từ một chuỗi

Để sử dụng nó, bạn khởi tạo một thể hiện mới. Sau đó, bạn sử dụng phương thức

<h1>Hi, universe!h1>
5 để chuyển đổi chuỗi của mình thành phần tử
<h1>Hi, universe!h1>
6 mới. Phương thức chấp nhận chuỗi làm đối số đầu tiên. Đặt đối số thứ hai thành
<h1>Hi, universe!h1>
7

Bởi vì nó thực sự là một phần tử

<h1>Hi, universe!h1>
6 mới, chúng tôi sẽ trả về
<h1>Hi, universe!h1>
9

<h1>Hi, universe!h1>
4

Bây giờ chúng tôi có thể làm điều này và sẽ không có tải xuống nào được kích hoạt

stringToHTML('
Làm cách nào để viết HTML trong chuỗi JavaScript?
'
);

Kết hợp hai cách tiếp cận

Phương pháp

<h1>Hi, universe!h1>
3 thật tuyệt vời, nhưng phương pháp
<h1>Hi, universe!h1>
5 dừng lại ở IE10

Tôi muốn kết hợp hai cách tiếp cận, sử dụng

<h1>Hi, universe!h1>
3 khi nó được hỗ trợ và quay lại tạo một phần tử và sử dụng
<h1>Hi, universe!h1>
0 khi nó không được hỗ trợ

Để kiểm tra hỗ trợ, chúng tôi sẽ gán IIFE cho biến

/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	// Code goes here...
};
4

Bên trong IIFE, trước tiên chúng tôi sẽ kiểm tra xem

/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	// Code goes here...
};
5 có tồn tại trong
/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	// Code goes here...
};
6 không. Nếu không, chúng tôi sẽ trả lại
/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	// Code goes here...
};
7. Tiếp theo, chúng tôi sẽ cố gắng sử dụng
<h1>Hi, universe!h1>
5 để tạo một
<h1>Hi, universe!h1>
6. Nếu thất bại, chúng tôi sẽ trả lại
/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	// Code goes here...
};
7. Nếu không, chúng tôi sẽ trả lại
/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};
1

<h1>Hi, universe!h1>
7

Bên trong phương pháp

/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};
2 của chúng tôi, chúng tôi sẽ sử dụng có điều kiện
<h1>Hi, universe!h1>
3 khi nó được hỗ trợ và
<h1>Hi, universe!h1>
0 khi nó không được hỗ trợ

Làm cách nào để đặt mã HTML vào chuỗi JavaScript?

Các phương thức append() & prepend() có thể được sử dụng để chèn chuỗi HTML bên trong một phần tử đã cho . Cả hai phương pháp phân tích chuỗi HTML đã cho dưới dạng văn bản và tạo nút Văn bản.

Chúng ta có thể viết mã HTML bằng JavaScript không?

Thẻ HTML . Để chọn một phần tử HTML, JavaScript thường sử dụng tài liệu. phương thức getElementById().

Làm cách nào để hiển thị văn bản HTML trong JavaScript?

Có bốn cách để hiển thị văn bản trong trình duyệt bằng JavaScript. .
Using the document. write() method to write inside the tag..
Sử dụng tài liệu. phương thức querySelector() để thay thế nội dung của một phần tử cụ thể
Sử dụng bảng điều khiển. .
Sử dụng phương thức alert() để ghi đầu ra văn bản vào hộp bật lên

Làm thế nào để viết một chuỗi HTML?

Bạn có thể tạo một thể hiện Chuỗi bằng cách sử dụng văn bản thuần túy hoặc HTML, chẳng hạn cả hai câu lệnh này đều hợp lệ. // Từ văn bản thuần túy var helloWorld = new HTMLString. String('Hello World'); // Từ HTML var helloWorldBold = new HTMLString.