2009-05-20 19 views
13

Cách tốt nhất để phân tích cú pháp (lấy một cây DOM) kết quả HTML của XmlHttpRequest trong Firefox là gì?Làm cách nào để phân tích HTML từ JavaScript trong Firefox?

EDIT:

tôi làm không có cây DOM, tôi muốn có được nó.

"responseXML" của XmlHttpRequest chỉ hoạt động khi kết quả là XML thực, vì vậy tôi chỉ có responseText để làm việc.

Lỗi nội bộHTML dường như không hoạt động với tài liệu HTML hoàn chỉnh (trong < html> </html>). - hóa ra nó hoạt động tốt.

+0

Trình duyệt phân tích cú pháp mã html thuần túy vì chúng tồn tại. Nhưng thật buồn khi không có cách tiêu chuẩn đơn giản nào có thể gọi trình phân tích cú pháp của trình duyệt để tạo một đối tượng HTMLDocument từ một chuỗi html ... – Calmarius

Trả lời

20

innerHTML nên chỉ làm việc tốt, ví dụ

// This would be after the Ajax request: 
var myHTML = XHR.responseText; 
var tempDiv = document.createElement('div'); 
tempDiv.innerHTML = myHTML.replace(/<script(.|\s)*?\/script>/g, ''); 

// tempDiv now has a DOM structure: 
tempDiv.childNodes; 
tempDiv.getElementsByTagName('a'); // etc. etc. 
+0

Có vẻ như đó là điều tốt nhất tôi có thể làm. Cảm ơn bạn đã có mẹo về số

1

Lặp lại thuộc tính phản hồiXML của đối tượng XMLHttpRequest. Hơn nữa, nếu bạn sử dụng innerHTML để gắn thêm responseText của một phản hồi định dạng HTML, trình duyệt sẽ phân tích cú pháp văn bản và lắp ráp nó trong DOM trước khi thêm nó vào luồng tài liệu.

1

Nếu dữ liệu của bạn là XHTML, do đó, XML hợp lệ, sau đó DOMParser (Mozilla) hoặc loadXML (IE) có thể hữu ích. Nếu không, tôi không thể nghĩ ra bất cứ điều gì tốt hơn là tước bỏ và sau đó chuyển nó đến một innerHtml của.

Xem 21.1.3 trong hướng dẫn Javascript của Flanagan (ấn bản thứ 5).

Colin

3

Ít nhất đối với các phiên bản Firefox mới hơn, một cách dễ dàng hơn hoặc sẽ sớm khả dụng.

https://developer.mozilla.org/en/HTML_in_XMLHttpRequest cho biết rằng bắt đầu từ FF11, bạn có thể yêu cầu DOM trực tiếp từ XHR bằng cách đặt thuộc tính responseType thành "document". Tại thời điểm đó, HTML sẽ được phân tích cú pháp và DOM được gắn vào responseXML đối với tài liệu XML.

0

Bạn có thể sử dụng để phân tích DOMParser HTML - thậm chí thẻ súp:

var parser = new DOMParser() 
parser.parseFromString('<!DOCTYPE html><html><head><title>hi</title></head><body><p>hello<b>world</b></p>', 'text/html') 

Tôi không biết nếu nó xử lý đánh dấu bảng phần tốt, nhưng nó phải tạo ra cùng một DOM trình duyệt chính nó cho khá nhiều bất kỳ đánh dấu nào.

Các vấn đề liên quan