มีวิธีใน JS เพื่อรับ HTML ทั้งหมดภายในแท็กhtmlเป็นสตริงหรือไม่
document.documentElement.??
document.body.parentElement.innerHTML
มีวิธีใน JS เพื่อรับ HTML ทั้งหมดภายในแท็กhtmlเป็นสตริงหรือไม่
document.documentElement.??
document.body.parentElement.innerHTML
คำตอบ:
MS ได้เพิ่มคุณสมบัติouterHTML
และinnerHTML
บางเวลาที่ผ่านมา
ตามMDN , outerHTML
ได้รับการสนับสนุนใน Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox มือถือ 11 IE Mobile, Opera Mobile และ Safari มือถือ outerHTML
อยู่ในDOM แยกและเป็นอันดับข้อกำหนด
ดูquirksmodeสำหรับความเข้ากันได้ของเบราว์เซอร์สำหรับสิ่งที่เหมาะกับคุณ innerHTML
การสนับสนุนทั้งหมด
var markup = document.documentElement.innerHTML;
alert(markup);
คุณทำได้
new XMLSerializer().serializeToString(document)
ในเบราว์เซอร์ใหม่กว่า IE 9
html
แท็กที่เซิร์ฟเวอร์ไม่เคยส่งจริง :(
ฉันเชื่อว่าdocument.documentElement.outerHTML
ควรคืนสิ่งนั้นให้คุณ
ตามMDN , outerHTML
ได้รับการสนับสนุนใน Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox มือถือ 11 IE Mobile, Opera Mobile และ Safari มือถือ outerHTML
อยู่ในDOM แยกและเป็นอันดับข้อกำหนด
เพจ MSDN บนouterHTML
คุณสมบัติจะบันทึกว่าได้รับการสนับสนุนใน IE 5+ ลิงก์คำตอบของ Colin ไปยังหน้า W3C quirksmode ซึ่งมีการเปรียบเทียบความเข้ากันได้ของ cross-browser (สำหรับคุณสมบัติ DOM อื่น ๆ ด้วย)
ฉันลองคำตอบต่าง ๆ เพื่อดูว่ามีอะไรกลับมา ฉันใช้ Chrome เวอร์ชันล่าสุด
คำแนะนำถูกdocument.documentElement.innerHTML;
ส่งคืน<head> ... </body>
คำแนะนำของ Gaby document.getElementsByTagName('html')[0].innerHTML;
กลับมาเหมือนเดิม
ข้อเสนอแนะที่document.documentElement.outerHTML;
ส่งคืน<html><head> ... </body></html>
ซึ่งเป็นทุกอย่างนอกเหนือจาก 'doctype'
คุณสามารถดึงข้อมูลวัตถุ doctype ด้วยdocument.doctype;
นี้ส่งคืนวัตถุไม่ใช่สตริงดังนั้นหากคุณต้องการแยกรายละเอียดเป็นสตริงสำหรับ doctypes ทั้งหมดจนถึงและรวมถึง HTML5 อธิบายไว้ที่นี่: รับDocType ของ HTML เป็นสตริงด้วย Javascript
ฉันแค่ต้องการ HTML5 ดังนั้นต่อไปนี้ก็เพียงพอสำหรับฉันในการสร้างเอกสารทั้งหมด:
alert('<!DOCTYPE HTML>' + '\n' + document.documentElement.outerHTML);
คุณยังสามารถทำสิ่งต่อไปนี้
document.getElementsByTagName('html')[0].innerHTML
คุณจะไม่ได้รับ Doctype หรือแท็ก html แต่อย่างอื่น ...
document.documentElement.outerHTML
outerHTML
อยู่ในDOM แยกและเป็นอันดับข้อกำหนด
น่าจะเป็น IE เท่านั้น:
> webBrowser1.DocumentText
สำหรับ FF เพิ่มขึ้นจาก 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));
อาจทำงานใน FF (แสดงให้เห็นถึง VERY FIRST 300 ตัวอักษรจากจุดเริ่มต้นของแหล่งที่มาข้อความมากส่วนใหญ่ doctype-defs)
แต่โปรดทราบว่า "บันทึกเป็น" ปกติ -Dialog ของ FF อาจไม่บันทึกสถานะปัจจุบันของหน้าเว็บแทนที่จะโหลด X / h / tml-source-text ดั้งเดิมทั้งหมด (POST-up ของ SS ไปที่ temp-file บางส่วนและเปลี่ยนเส้นทางไปยังที่อาจส่งมอบข้อความต้นฉบับที่บันทึกได้พร้อมกับการเปลี่ยนแปลง / การแก้ไขก่อนหน้านี้)
แม้ว่า FF ที่น่าประหลาดใจโดยการกู้คืนที่ดีใน "back" และการรวม NICE ของรัฐ / ค่าที่ "Save (as) ... " สำหรับ FIELDS ที่เหมือนอินพุท textareaฯลฯ ไม่ได้อยู่ในองค์ประกอบใน contenteditable / designMode ...
ถ้าไม่ใช่ xhtml- resp ไฟล์ xml (ประเภท mime ไม่ใช่แค่ชื่อไฟล์นามสกุล!) ไฟล์หนึ่งอาจใช้ document.open/write/close เพื่อตั้งค่า appr เนื้อหาไปยังเลเยอร์ต้นทางที่จะถูกบันทึกในกล่องโต้ตอบบันทึกของผู้ใช้จากเมนู File / Save menue ของ FF ดู: http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite resp
https://developer.mozilla.org/en-US/docs/Web/API/document.write
เป็นกลางกับคำถามของ X (ht) ML ลองใช้ "view-source: http: // ... " เป็นค่าของ src-attrib ของ iframe (ทำสคริปต์ !?) - เพื่อเข้าถึง iframes- เอกสารใน FF:
<iframe-elementnode>.contentDocument
ดู google "mdn contentDocument" สำหรับ appr สมาชิกเช่น 'textContent' เป็นต้น 'เมื่อหลายปีก่อนและไม่ชอบที่จะคลาน หากยังมีความจำเป็นเร่งด่วนให้เอ่ยถึงสิ่งนี้ว่าฉันจะต้องดำน้ำใน ...
document.documentElement
ใช้
ตอบคำถามเดียวกันที่นี่: https://stackoverflow.com/a/7289396/2164160
.outerHTML
และเพื่อให้ได้document.doctype
และคำตอบที่สมบูรณ์ที่สุดคือเปาโล
เพื่อให้ได้สิ่งนอก<html>...</html>
, สิ่งสำคัญที่สุดคือการ<!DOCTYPE ...>
ประกาศ, คุณสามารถเดินผ่าน document.childNodes, เปลี่ยนเป็นสตริง:
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}`)
}
}
ฉันเผยแพร่รหัสนี้เป็นdocument-outerhtmlเมื่อเวลา 23.00 น.
แก้ไขหมายเหตุรหัสด้านบนขึ้นอยู่กับฟังก์ชั่นdoctypeToString
; การใช้งานอาจมีดังต่อไปนี้ (โค้ดด้านล่างนี้เผยแพร่เมื่อ npm เป็น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
}
ฉันมักจะใช้
document.getElementsByTagName('html')[0].innerHTML
อาจไม่ใช่วิธีที่ถูกต้อง แต่ฉันสามารถเข้าใจได้เมื่อฉันเห็นมัน
<html...>
แท็ก
ฉันต้องการ doctype html และควรทำงานได้ดีใน IE11, Edge และ Chrome ฉันใช้โค้ดด้านล่างมันใช้งานได้ดี
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');
}
}
และในแท็กสมอของคุณใช้เช่นนี้
<a href="#" onclick="downloadPage(this,event);" download>Download entire page.</a>
ตัวอย่าง
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>
ฉันใช้outerHTML
สำหรับองค์ประกอบ ( <html>
คอนเทนเนอร์หลัก) และXMLSerializer
สำหรับสิ่งอื่นรวมถึง<!DOCTYPE>
ความคิดเห็นแบบสุ่มนอก<html>
คอนเทนเนอร์หรืออะไรก็ได้ที่อาจมี ดูเหมือนว่าช่องว่างที่ไม่ได้รับการเก็บรักษาไว้นอกองค์ประกอบดังนั้นฉันเพิ่มขึ้นบรรทัดใหม่โดยเริ่มต้นด้วย<html>
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));
คุณต้องวนซ้ำเอกสารโหนดและรับเนื้อหา outerHTML
ใน VBA ดูเหมือนว่านี้
For Each e In document.ChildNodes
Put ff, , e.outerHTML & vbCrLf
Next e
การใช้สิ่งนี้จะช่วยให้คุณสามารถรับองค์ประกอบทั้งหมดของหน้าเว็บรวมถึงโหนด <! DOCTYPE> หากมีอยู่
วิธีที่ถูกต้องเป็นจริง:
webBrowser1.DocumentText