HTML là cốt lõi của web, tất cả các trang bạn thấy trên internet đều là HTML, cho dù chúng được tạo động bởi JavaScript, JSP, PHP, ASP hay bất kỳ công nghệ web nào khác. Trình duyệt của bạn thực sự phân tích cú pháp HTML và hiển thị nó cho bạn Nhưng nếu chúng tôi cần phân tích cú pháp tài liệu HTML và tìm một số thành phần, thẻ, thuộc tính hoặc kiểm tra xem một thành phần cụ thể có tồn tại hay không. Trong java, chúng ta có thể trích xuất nội dung HTML và có thể phân tích cú pháp Tài liệu HTML
phương pháp tiếp cận
- Sử dụng FileReader
- Sử dụng url. openStream[]
Cách tiếp cận 1. Thư viện được gọi là FileReader cung cấp cách đọc bất kỳ Tệp nào bất kể Tiện ích mở rộng nào. Cách nối các dòng HTML vào Trình tạo chuỗi như sau
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!
0app.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!
7Bở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!
9Hi, universe!
4Bâ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 ở IE10Tô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...
};
4Bê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;
};
1Hi, universe!
7Bê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ợ