Lütfen tüm HTML almak için JS bir yolu var mı html etiketleri bir dize olarak?
document.documentElement.??
document.body.parentElement.innerHTML
Lütfen tüm HTML almak için JS bir yolu var mı html etiketleri bir dize olarak?
document.documentElement.??
document.body.parentElement.innerHTML
Yanıtlar:
MS, outerHTML
ve innerHTML
özelliklerini bir süre önce .
MDN'ye göre , outerHTML
Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile ve Safari Mobile'da desteklenmektedir. outerHTML
olan DOM Ayrıştırma ve Seri tarifnamede.
Sizin için nelerin işe yarayacağına ilişkin tarayıcı uyumluluğu için quirksmode'a bakın . Tüm destek innerHTML
.
var markup = document.documentElement.innerHTML;
alert(markup);
Yapabilirsin
new XMLSerializer().serializeToString(document)
IE 9'dan daha yeni tarayıcılarda
html
sunucunun gerçekte hiç göndermediği etikete özellikler ekledi :(
Bunu document.documentElement.outerHTML
senin için geri getireceğine inanıyorum .
MDN'ye göre , outerHTML
Firefox 11, Chrome 0.2, Internet Explorer 4.0, Opera 7, Safari 1.3, Android, Firefox Mobile 11, IE Mobile, Opera Mobile ve Safari Mobile'da desteklenmektedir. DOM Ayrıştırma ve SerileştirmeouterHTML
aşamasında tarifnamede.
MSDN sayfa outerHTML
özelliği o 5+ IE desteklendiğini notları. Colin'in yanıtları, tarayıcılar arası uyumluluğun iyi bir karşılaştırmasını sunan W3C quirksmode sayfasına bağlanır (diğer DOM özellikleri için de).
Neyin geri döndüğünü görmek için çeşitli cevapları denedim. Chrome'un en son sürümünü kullanıyorum.
Öneri document.documentElement.innerHTML;
geri döndü<head> ... </body>
Gaby'nin önerisi document.getElementsByTagName('html')[0].innerHTML;
de aynı şekilde döndü.
Öneri
'doktrin'den ayrı olan her şey document.documentElement.outerHTML;
geri döndü <html><head> ... </body></html>
.
İle doctype nesnesini alabilirsiniz document.doctype;
Bu bir dize değil bir nesne döndürür, bu yüzden HTML5'e kadar ve HTML5 de dahil olmak üzere tüm doctypes için dize olarak ayrıntıları ayıklamanız gerekirse burada açıklanır: Bir HTML'nin DocType'ını Javascript ile dize olarak alın
Yalnızca HTML5 istedim, bu yüzden aşağıdaki belgenin tamamını oluşturmak için yeterliydi:
alert('<!DOCTYPE HTML>' + '\n' + document.documentElement.outerHTML);
document.documentElement.outerHTML
outerHTML
olan DOM Ayrıştırma ve Seri tarifnamede.
SADECE IE:
> webBrowser1.DocumentText
1.0 FF için:
//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'de çalışabilir. (Kaynak metnin ÇOK başından itibaren ÇOK İLK 300 karakterini gösterir, çoğunlukla doküman türü def.)
AMA normal "Farklı Kaydet" -FF Dialog, sayfanın geçerli durumunu kaydetmez OLABİLİR unutmayın, daha ziyade başlangıçta yüklü X / h / tml-kaynak-metin !! (ss'nin geçici bir dosyaya POST-up'ı ve buna yeniden yönlendirme, daha önce yapılan değişiklikler / düzenlemeler ile kaydedilebilir bir kaynak metin sağlayabilir.)
FF, "geri" iyi iyileşme ve içeriğe uygun / designMode öğelerinde değil , girdi benzeri FIELDS, textarea vb.
Eğer bir xhtml- değilse. xml dosyası (mime tipi, sadece dosya adı uzantısı DEĞİL!), biri appr ayarlamak için document.open/write/close kullanabilirsiniz. kaynak katmana, kullanıcının FF Dosya / Kaydet menüsünden kaydet iletişim kutusuna kaydedilecek içerik. bkz . http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite resp.
https://developer.mozilla.org/en-US/docs/Web/API/document.write
X (ht) ML soruları için nötr, bir (script-made !?) iframe'in src-niteliğinin değeri olarak bir "view-source: http: // ..." deneyin - iframe'lere erişmek için- FF'deki belge:
<iframe-elementnode>.contentDocument
, appr için google "mdn contentDocument" e bakın. örneğin 'textContent' gibi üyeler. `` O yıllar önce var ve taramayı sevmiyorum. Hala acil ihtiyaç duyuyorsanız, bundan bahsetmem gerektiğini söyleyin ...
Kullanın document.documentElement
.
Aynı soru burada cevaplandı: https://stackoverflow.com/a/7289396/2164160
.outerHTML
ve almak için document.doctype
ve en eksiksiz cevap Paolo's .
Ayrıca <html>...</html>
, en önemlisi <!DOCTYPE ...>
bildirimin dışında bir şeyler elde etmek için , her biri bir dizeye dönüştürerek document.childNodes'u yürütebilirsiniz:
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}`)
}
}
Bu kodu npm'de document-externalhtml olarak yayınladım.
düzenlemek Yukarıdaki kod bir işleve bağlıdır doctypeToString
; uygulaması aşağıdaki gibi olabilir (aşağıdaki kod npm'de doctype-dize olarak yayınlanır ):
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
}
Her zaman kullanırım
document.getElementsByTagName('html')[0].innerHTML
Muhtemelen doğru yol değil ama gördüğümde anlayabiliyorum.
<html...>
Etiketi döndürmeyeceği için bu yanlıştır .
Sadece doctype html'ye ihtiyacım var ve IE11, Edge ve Chrome'da iyi çalışmalı. Kodun altında kullandım iyi çalışıyor.
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');
}
}
ve bağlantı etiketinizde böyle kullanın.
<a href="#" onclick="downloadPage(this,event);" download>Download entire page.</a>
Misal
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>
Ben kullanıyorum outerHTML
(ana elementler için <html>
konteyner) ve XMLSerializer
herhangi bir şey için başka dahil <!DOCTYPE>
dışında, rastgele bir yorum <html>
konteyner, ya da orada başka ne olabilir. Beyaz alan <html>
öğenin dışında korunmuyor gibi görünüyor , bu yüzden varsayılan olarak yeni satırlar ekliyorum 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));