Làm cách nào để chuyển đổi các thẻ HTML thành văn bản trong jQuery?

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 để chuyển đổi phần tử HTML thành chuỗi trong jQuery?

Chuyển đối tượng jQuery thành chuỗi. Mã JavaScript. var element = $['

Làm cách nào để chuyển đổi các thẻ HTML thành văn bản trong JS?

Hãy đi sâu vào và xem nó hoạt động như thế nào. .
1] Using . replace[/]*>/g, ''] .. .
2] Tạo phần tử DOM tạm thời và truy xuất văn bản. Đây là cách hiệu quả nhất để thực hiện nhiệm vụ. .
3] gói npm chuyển html thành văn bản. Đây là gói tôi phát hiện ra gần đây

Làm cách nào để chuyển đổi thẻ HTML thành chuỗi?

Tạo một phần tử giả và gán nó cho một biến. Chúng ta có thể trích xuất sau bằng cách sử dụng các đối tượng phần tử. Gán văn bản HTML cho InternalHTML của phần tử giả và chúng ta sẽ nhận được văn bản thuần túy từ các đối tượng phần tử văn bản

Làm cách nào để xóa các thẻ HTML trong chuỗi jQuery?

Để xóa các thẻ HTML, hãy sử dụng hàm text[] hàm này chỉ trả về nội dung văn bản và bỏ qua phần HTML.

Chủ Đề