Viết chuỗi html trong 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

Hi, universe!
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

Hi, universe!
0 là

Hi, universe!

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

Hi, universe!
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

Hi, universe!
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[''];

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.

Hi, universe!
3. Đối tượng
Hi, universe!
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

Hi, universe!
5 để chuyển đổi chuỗi của mình thành phần tử
Hi, universe!
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
Hi, universe!
7

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

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

Hi, universe!
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[''];

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

Phương pháp

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

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

Hi, universe!
3 khi nó được hỗ trợ và quay lại tạo một phần tử và sử dụng
Hi, universe!
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
Hi, universe!
5 để tạo một
Hi, universe!
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

Hi, universe!
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
Hi, universe!
3 khi nó được hỗ trợ và
Hi, universe!
0 khi nó không được hỗ trợ

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

innerHTML = markup; Bạn cũng có thể sử dụng tài liệu. createElement để tạo một phần tử, thiết lập bên trong. HTML , sau đó nối nó vào phần thân, bất cứ thứ gì bạn thích, điều này cũng giống với đánh dấu.

Làm cách nào để viết phần tử HTML trong JavaScript?

Đầu ra JavaScript .
Viết vào phần tử HTML, sử dụng InternalHTML
Viết vào đầu ra HTML bằng tài liệu. viết[]
Viết vào hộp cảnh báo, sử dụng cửa sổ. báo động[]
Viết vào bảng điều khiển trình duyệt, sử dụng bảng điều khiển. nhật ký[]

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.

Chúng ta có thể viết mã HTML trong tệp JS không?

Có nhiều cách để viết html với JavaScript. tài liệu. ghi chỉ hữu ích khi bạn muốn ghi vào trang trước khi nó thực sự được tải

Chủ Đề