Hướng dẫn how do i parse a string in html? - làm cách nào để phân tích cú pháp một chuỗi trong html?

Hôm qua, tôi đã viết về rạn san hô, sự thay thế nhẹ của tôi cho Vue và React. Trong vài ngày tới, tôi muốn xem cách các phần khác nhau của nó hoạt động dưới thời trang.

Hôm nay, chúng tôi 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 tiêm một chuỗi vào DOM, bạn có thể làm điều đó khá đơn giản với innerHTML.

app.innerHTML = '

Hello, world!

'
;

Nhưng rạn san hô 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 yếu tố với cách nhì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 app là:

Rạn san hô sẽ chỉ cập nhật văn bản bên 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...
};
0 thay vì tạo một yếu tố hoàn toàn mới.

Để nó hoạt động, chúng ta cần chuyển đổi chuỗi HTML thành các phần tử HTML thực tế có thể đi qua, ánh xạ và phân tích.

Tạo phương pháp trợ giúp

Đầu tiên, hãy để tạo ra 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 innerHTML, 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 là hoàn hảo, mặc dù.

Mặc dù yếu tố này được tách ra, đó là, không thực sự trong DOM hiện tại, trình duyệt vẫn sẽ làm những việc như tải xuống các tệp hình ảnh.

Điều này sẽ kích hoạt một tệp hình ảnh để tải xuống, mặc dù đánh dấu không được hiển thị ở bất cứ đâu.

stringToHTML('
Hướng dẫn how do i parse a string in html? - làm cách nào để phân tích cú pháp một chuỗi trong html?
'
);

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

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

/**
 * 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...
};
2. Đối tượng
/**
 * 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...
};
2 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

/**
 * 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 để chuyển đổi chuỗi của mình thành 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) {
	// Code goes here...
};
5 mới. Phương thức chấp nhận chuỗi khi nó đối số đầu tiên. Đặt đối số thứ hai thành
/**
 * 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.

Bởi vì nó có nghĩa đen là một yếu tố

/**
 * 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 mớ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...
};
8.

/**
 * Convert a template string into HTML DOM nodes
 * @param  {String} str The template string
 * @return {Node}       The template HTML
 */
var stringToHTML = function (str) {
	var parser = new DOMParser();
	var doc = parser.parseFromString(str, 'text/html');
	return doc.body;
};

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

stringToHTML('
Hướng dẫn how do i parse a string in html? - làm cách nào để phân tích cú pháp một chuỗi trong html?
'
);

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

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) {
	// Code goes here...
};
2 là tuyệt vời, nhưng 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) {
	// Code goes here...
};
4 dừng ở IE10.

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

/**
 * 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...
};
2 khi nó được hỗ trợ và rơi trở lại để tạo ra một yếu tố và sử dụng innerHTML khi nó không.

Để kiểm tra hỗ trợ, chúng tôi sẽ chỉ định một 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) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};
3.

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) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};
4 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) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};
5 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) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};
6. Tiếp theo, chúng tôi sẽ cố gắng sử dụng
/**
 * 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 để tạo
/**
 * 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. Nếu nó 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) {
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;
};
6. Nếu không, chúng tôi sẽ trở lại
stringToHTML('
Hướng dẫn how do i parse a string in html? - làm cách nào để phân tích cú pháp một chuỗi trong html?
'
);
0.

var support = (function () {
	if (!window.DOMParser) return false;
	var parser = new DOMParser();
	try {
		parser.parseFromString('x', 'text/html');
	} catch(err) {
		return false;
	}
	return true;
})();

Bên trong phương pháp

stringToHTML('
Hướng dẫn how do i parse a string in html? - làm cách nào để phân tích cú pháp một chuỗi trong html?
'
);
1 của chúng tôi, chúng tôi sẽ sử dụng
/**
 * 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...
};
2 một cách có điều kiện khi nó hỗ trợ và innerHTML khi nó không.

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

	// If DOMParser is supported, use it
	if (support) {
		var parser = new DOMParser();
		var doc = parser.parseFromString(str, 'text/html');
		return doc.body;
	}

	// Otherwise, fallback to old-school method
	var dom = document.createElement('div');
	dom.innerHTML = str;
	return dom;

};

Ở đây, một bản demo trên Codepen để bạn chơi xung quanh.

Ngày mai, chúng tôi sẽ xem xét cách tạo bản đồ các nút dom mà chúng tôi có thể sử dụng cho Dom Diffing.

Làm thế nào để bạn phân tích văn bản trong html?

Ví dụ sau đây sẽ giới thiệu việc sử dụng các phương thức để lấy văn bản sau khi phân tích chuỗi HTML vào đối tượng tài liệu ...
Cú pháp. Tài liệu tài liệu = jsoup.parse (html); Phần tử link = document.select ("a"). First (); System.out.println ("Text:" + link.text ()); ....
Sự mô tả. ....
Thí dụ. ....
Xác minh kết quả ..

Làm thế nào để bạn chuyển đổi một chuỗi trong HTML?

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 bên trong, sau đó trả về phần tử. .create an element, insert the string into with innerHTML , then return the element. /** * 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.

Parse trong HTML là gì?

Phân tích phân tích có nghĩa là phân tích và chuyển đổi một chương trình thành một định dạng nội bộ mà môi trường thời gian chạy thực sự có thể chạy, ví dụ như công cụ JavaScript bên trong các trình duyệt.Trình duyệt phân tích cú pháp HTML vào cây dom.analyzing and converting a program into an internal format that a runtime environment can actually run, for example the JavaScript engine inside browsers. The browser parses HTML into a DOM tree.

Trình phân tích cú pháp HTML tốt nhất là gì?

Những người biểu diễn tốt nhất là Golang và C với kết quả rất giống nhau.Python libxml2 hoạt động khá tốt.Tốc độ Ruby tương tự như Python.Golang and C with very similar results. Python LIBXML2 performs fairly well. Ruby speed is similar to Python.