Có cách nào trong JS để lấy toàn bộ HTML trong các thẻ html , dưới dạng một chuỗi không?
document.documentElement.??
document.body.parentElement.innerHTML
Có cách nào trong JS để lấy toàn bộ HTML trong các thẻ html , dưới dạng một chuỗi không?
document.documentElement.??
document.body.parentElement.innerHTML
Câu trả lời:
MS đã thêm outerHTML
và innerHTML
các thuộc tính một thời gian trước đây.
Theo MDN , outerHTML
được hỗ trợ trong Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile và Safari Mobile. outerHTML
nằm trong đặc tả DOM Parsing và serialization .
Xem quirksmode để tương thích trình duyệt để biết những gì sẽ làm việc cho bạn. Tất cả hỗ trợ innerHTML
.
var markup = document.documentElement.innerHTML;
alert(markup);
Bạn có thể làm
new XMLSerializer().serializeToString(document)
trong các trình duyệt mới hơn IE 9
html
thẻ mà máy chủ không bao giờ thực sự gửi :(
Tôi tin rằng document.documentElement.outerHTML
nên trả lại cho bạn.
Theo MDN , outerHTML
được hỗ trợ trong Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile và Safari Mobile. outerHTML
nằm trong đặc tả DOM Parsing và serialization .
Trang MSDN trên thuộc outerHTML
tính lưu ý rằng nó được hỗ trợ trong IE 5+. Câu trả lời của Colin liên kết đến trang quirksmode W3C, cung cấp một so sánh tốt về khả năng tương thích trình duyệt chéo (đối với các tính năng DOM khác).
Tôi đã thử các câu trả lời khác nhau để xem những gì được trả lại. Tôi đang sử dụng phiên bản Chrome mới nhất.
Đề nghị document.documentElement.innerHTML;
trả lại<head> ... </body>
Gợi ý của Gaby document.getElementsByTagName('html')[0].innerHTML;
cũng như vậy.
Gợi ý document.documentElement.outerHTML;
trả về <html><head> ... </body></html>
đó là tất cả mọi thứ ngoài 'doctype'.
Bạn có thể truy xuất đối tượng doctype bằng document.doctype;
Điều này trả về một đối tượng, không phải là một chuỗi, vì vậy nếu bạn cần trích xuất các chi tiết dưới dạng chuỗi cho tất cả các loại tài liệu lên đến và bao gồm cả HTML5 thì nó được mô tả ở đây: Lấy DocType của HTML dưới dạng chuỗi bằng Javascript
Tôi chỉ muốn HTML5, vì vậy những điều sau đây là đủ để tôi tạo toàn bộ tài liệu:
alert('<!DOCTYPE HTML>' + '\n' + document.documentElement.outerHTML);
document.documentElement.outerHTML
outerHTML
nằm trong đặc tả DOM Parsing và serialization .
VẤN ĐỀ CHỈ IE:
> webBrowser1.DocumentText
cho FF tăng từ 1.0:
//serialize current DOM-Tree incl. changes/edits to ss-variable
var ns = new XMLSerializer();
var ss= ns.serializeToString(document);
alert(ss.substr(0,300));
có thể làm việc trong FF. (Hiển thị 300 ký tự RẤT ĐẦU TIÊN từ đầu RẤT của văn bản nguồn, chủ yếu là doctype-defs.)
NHƯNG hãy lưu ý rằng "Lưu dưới dạng" bình thường của FF MIGHT KHÔNG lưu trạng thái hiện tại của trang, thay vào đó là văn bản X / h / tml-source-text được tải chính thức !! (POST-up của ss với một số tệp tạm thời và chuyển hướng đến đó có thể cung cấp một văn bản nguồn có thể hiểu được với các thay đổi / chỉnh sửa trước đó được thực hiện cho nó.)
Mặc dù FF gây bất ngờ bằng cách phục hồi tốt ở "mặt sau" và bao gồm các trạng thái / giá trị của NICE trên "Lưu (dưới dạng ...)" cho FIELDS giống như đầu vào, textarea , v.v., không phải trên các yếu tố trong nội dung / designMode ...
Nếu KHÔNG phải là xhtml- resp. xml-file (loại mime, KHÔNG chỉ là tên tệp mở rộng!), người ta có thể sử dụng document.open/write/c Đóng để cài đặt appr. nội dung cho lớp nguồn, sẽ được lưu trên hộp thoại lưu của người dùng từ tệp tin / Lưu tệp FF. xem: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite resp.
https://developer.mozilla.org/en-US/docs/Web/API/document.write
Trung lập với các câu hỏi của X (ht) ML, hãy thử "nguồn xem: http: // ..." làm giá trị của src-attrib của iframe (được tạo bởi tập lệnh!), - để truy cập vào iframe- tài liệu trong FF:
<iframe-elementnode>.contentDocument
, xem google "mdn contentDocument" cho appr. các thành viên, như 'textContent' chẳng hạn. 'Có những năm trước và không thích bò cho nó. Nếu vẫn còn cần gấp, hãy đề cập đến điều này, rằng tôi phải lặn trong ...
Sử dụng document.documentElement
.
Câu hỏi tương tự đã được trả lời tại đây: https://stackoverflow.com/a/7289394/2164160
.outerHTML
và để có được document.doctype
, và câu trả lời đầy đủ nhất là của Paolo .
Để nhận được những thứ bên ngoài <html>...</html>
, quan trọng nhất là <!DOCTYPE ...>
khai báo, bạn có thể đi qua document.childNodes, biến mỗi thứ thành một chuỗi:
const html = [...document.childNodes]
.map(node => nodeToString(node))
.join('\n') // could use '' instead, but whitespace should not matter.
function nodeToString(node) {
switch (node.nodeType) {
case node.ELEMENT_NODE:
return node.outerHTML
case node.TEXT_NODE:
// Text nodes should probably never be encountered, but handling them anyway.
return node.textContent
case node.COMMENT_NODE:
return `<!--${node.textContent}-->`
case node.DOCUMENT_TYPE_NODE:
return doctypeToString(node)
default:
throw new TypeError(`Unexpected node type: ${node.nodeType}`)
}
}
Tôi đã xuất bản mã này dưới dạng document-outshtml trên npm .
chỉnh sửa Lưu ý mã ở trên phụ thuộc vào một chức năng doctypeToString
; việc thực hiện của nó có thể như sau (mã dưới đây được xuất bản vào npm dưới dạng doctype-to-string ):
function doctypeToString(doctype) {
if (doctype === null) {
return ''
}
// Checking with instanceof DocumentType might be neater, but how to get a
// reference to DocumentType without assuming it to be available globally?
// To play nice with custom DOM implementations, we resort to duck-typing.
if (!doctype
|| doctype.nodeType !== doctype.DOCUMENT_TYPE_NODE
|| typeof doctype.name !== 'string'
|| typeof doctype.publicId !== 'string'
|| typeof doctype.systemId !== 'string'
) {
throw new TypeError('Expected a DocumentType')
}
const doctypeString = `<!DOCTYPE ${doctype.name}`
+ (doctype.publicId ? ` PUBLIC "${doctype.publicId}"` : '')
+ (doctype.systemId
? (doctype.publicId ? `` : ` SYSTEM`) + ` "${doctype.systemId}"`
: ``)
+ `>`
return doctypeString
}
Tôi luôn luôn sử dụng
document.getElementsByTagName('html')[0].innerHTML
Có lẽ không phải là cách đúng đắn nhưng tôi có thể hiểu nó khi tôi nhìn thấy nó.
<html...>
thẻ.
Tôi chỉ cần html doctype và sẽ hoạt động tốt trong IE11, Edge và Chrome. Tôi đã sử dụng mã dưới đây nó hoạt động tốt.
function downloadPage(element, event) {
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
if ((navigator.userAgent.indexOf("MSIE") != -1) || (!!document.documentMode == true)) {
document.execCommand('SaveAs', '1', 'page.html');
event.preventDefault();
} else {
if(isChrome) {
element.setAttribute('href','data:text/html;charset=UTF-8,'+encodeURIComponent('<!doctype html>' + document.documentElement.outerHTML));
}
element.setAttribute('download', 'page.html');
}
}
và trong thẻ neo của bạn sử dụng như thế này.
<a href="#" onclick="downloadPage(this,event);" download>Download entire page.</a>
Thí dụ
function downloadPage(element, event) {
var isChrome = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);
if ((navigator.userAgent.indexOf("MSIE") != -1) || (!!document.documentMode == true)) {
document.execCommand('SaveAs', '1', 'page.html');
event.preventDefault();
} else {
if(isChrome) {
element.setAttribute('href','data:text/html;charset=UTF-8,'+encodeURIComponent('<!doctype html>' + document.documentElement.outerHTML));
}
element.setAttribute('download', 'page.html');
}
}
I just need doctype html and should work fine in IE11, Edge and Chrome.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
<p>
<a href="#" onclick="downloadPage(this,event);" download><h2>Download entire page.</h2></a></p>
<p>Some image here</p>
<p><img src="https://placeimg.com/250/150/animals"/></p>
Tôi đang sử dụng outerHTML
cho các yếu tố ( <html>
thùng chứa chính ) và XMLSerializer
cho bất kỳ thứ gì khác bao gồm <!DOCTYPE>
, các nhận xét ngẫu nhiên bên ngoài <html>
thùng chứa, hoặc bất cứ thứ gì khác có thể ở đó. Có vẻ như khoảng trắng không được bảo tồn bên ngoài <html>
phần tử, vì vậy tôi sẽ thêm các dòng mới theo mặc định sep="\n"
.
function get_document_html(sep="\n") {
let html = "";
let xml = new XMLSerializer();
for (let n of document.childNodes) {
if (n.nodeType == Node.ELEMENT_NODE)
html += n.outerHTML + sep;
else
html += xml.serializeToString(n) + sep;
}
return html;
}
console.log(get_document_html().slice(0, 200));
Bạn phải lặp lại thông qua tài liệu conNodes và nhận nội dungHTML bên ngoài.
trong VBA nó trông như thế này
For Each e In document.ChildNodes
Put ff, , e.outerHTML & vbCrLf
Next e
bằng cách này, cho phép bạn lấy tất cả các thành phần của trang web bao gồm nút <! DOCTYPE> nếu nó tồn tại