سؤال

هل هناك طريقة في شبيبة للحصول على كامل HTML داخل html العلامات ، سلسلة ؟

document.documentElement.??
هل كانت مفيدة؟

المحلول

وMS أضاف outerHTML وinnerHTML خصائص منذ بعض الوقت.

ووفقا ل MDN ، ويدعم outerHTML في فايرفوكس 11 ، والكروم 0.2، وإنترنت إكسبلورر 4.0، أوبرا 7 وسفاري 1.3، الروبوت، فايرفوكس موبايل 11، IE موبايل، أوبرا موبايل، وسفاري موبايل. outerHTML هو في مواصفات DOM توزيع والتسلسل .

quirksmode للحصول على متصفح التوافق على ما سوف تعمل من أجلك. كل innerHTML الدعم.

var markup = document.documentElement.innerHTML;
alert(markup);

نصائح أخرى

ويمكنك القيام

new XMLSerializer().serializeToString(document)

وفي المتصفحات أحدث من 9 IE

https://caniuse.com/#feat=xml-serializer

وأعتقد document.documentElement.outerHTML يجب إرجاع ذلك لك.

ووفقا ل MDN ، ويدعم outerHTML في فايرفوكس 11 ، والكروم 0.2، وإنترنت إكسبلورر 4.0، أوبرا 7 وسفاري 1.3، الروبوت، فايرفوكس موبايل 11، IE موبايل، أوبرا موبايل، وسفاري موبايل. outerHTML هو في مواصفات DOM توزيع والتسلسل .

وصفحة MSDN على outerHTML الملكية تلاحظ معتمد في IE 5+. الجواب الروابط كولن إلى الصفحة quirksmode W3C، الذي يقدم مقارنة جيدة من التوافق عبر المتصفح (لليتميز DOM الأخرى أيضا).

وحاولت إجابات مختلفة لمعرفة ما يتم إرجاعها. أنا باستخدام أحدث نسخة من الكروم.

ووdocument.documentElement.innerHTML; اقتراح عاد <head> ... </body>

وdocument.getElementsByTagName('html')[0].innerHTML; اقتراح غابي لعاد هو نفسه.

ووdocument.documentElement.outerHTML; اقتراح عاد <html><head> ... </body></html> وهو كل شيء وبصرف النظر عن "نوع المستند".

ويمكنك استرداد الكائن DOCTYPE مع document.doctype; هذا بإرجاع كائن، وليس سلسلة، حتى إذا كنت تحتاج إلى استخراج تفاصيل كسلاسل لجميع doctypes وبما يصل إلى HTML5 هو موضح هنا: <لأ href = "HTTPS: //stackoverflow.com/questions/6088972/get-doctype-of-an-html-as-string-with-javascript">Get DOCTYPE من HTML كسلسلة مع جافا سكريبت

وأردت فقط HTML5، لذلك كان ما يلي كافيا بالنسبة لي لإنشاء مستند كاملة:

وalert('<!DOCTYPE HTML>' + '\n' + document.documentElement.outerHTML);

ويمكنك أيضا القيام:

document.getElementsByTagName('html')[0].innerHTML

وأنت لن تحصل على DOCTYPE أو أتش تي أم أل العلامة، ولكن كل شيء آخر ...

document.documentElement.outerHTML

ربما فقط أي:

>     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.(يظهر أول 300 حرفا من بداية مصدر النص في الغالب doctype-defs.)

ولكن تكون على علم بأن طبيعي "حفظ باسم"-حوار من FF قد لا لإنقاذ الوضع الحالي من الصفحة ، بل originallly تحميل X//h tml-مصدر النص !!(بعد من ss بعض temp ملف إعادة توجيه إلى أنه قد تقدم saveable مصدر النص مع التغييرات/التحرير قبل إلى ذلك.)

على الرغم من FF مفاجآت جيدة الانتعاش على "العودة" و لطيفة إدراج الولايات القيم على "حفظ (ع) ..." الإدخال مثل حقول النص الخ. وليس على عناصر في contenteditable/ designMode...

إن لم يكن xhtml - resp.xml ملف (mime-type ، ليس فقط اسم الملف التمديد!), يمكن للمرء أن استخدام الوثيقة.فتح/الكتابة/بالقرب من تعيين appr.محتوى المصدر طبقة ، التي سيتم حفظها على المستخدم حفظ الحوار من ملف/حفظ مينو من FF.انظر:http://www.w3.org/MarkUp/2004/xhtml-faq#docwrite resp.

https://developer.mozilla.org/en-US/docs/Web/API/document.write

محايد على الأسئلة من س(ht)مل ، في محاولة "عرض المصدر:http://..." كقيمة src-attrib من (سيناريو-جعل!؟) iframe ، إلى الوصول إلى نوافذ الأطر المدمجة-الوثيقة في FF:

<iframe-elementnode>.contentDocument, انظر جوجل "مدن contentDocument" على appr.أعضاء, مثل 'textContent' على سبيل المثال.حصل هذا منذ سنوات و لا ترغب في الزحف على ذلك.إذا كان لا يزال في حاجة ماسة إلى ذكر هذا أنني حصلت على الغوص في ...

document.documentElement.innerHTML

وأنا دائما استخدام

document.getElementsByTagName('html')[0].innerHTML

وربما لا يكون الطريق الصحيح ولكن أستطيع أن أفهم ذلك عندما أراه.

استخدم document.documentElement.

ونفس السؤال أجاب هنا: https://stackoverflow.com/a/7289396/2164160

أيضا الحصول على أشياء خارج <html>...</html>, والأهم من ذلك على <!DOCTYPE ...> الإعلان, يمكنك المشي من خلال الوثيقة.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}`)
    }
}

نشرت هذه المدونة الوثيقة-outerhtml على الآلية الوقائية الوطنية.


تحرير ملاحظة رمز أعلاه يعتمد على وظيفة doctypeToString;تنفيذها يمكن أن تكون على النحو التالي (رمز أدناه يتم نشر بشأن الآلية الوقائية الوطنية كما doctype إلى سلسلة):

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
}

أنا فقط بحاجة doctype html و يجب أن تعمل بشكل جيد في IE11, حافة الكروم.أنا استخدم رمز أدناه أنه يعمل بشكل جيد.

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>

لديك لتكرار خلال childNodes ثيقة والحصول على محتوى outerHTML.

وفي VBA يبدو مثل هذا

For Each e In document.ChildNodes
    Put ff, , e.outerHTML & vbCrLf
Next e

وباستخدام هذا، ويسمح لك للحصول على كل عناصر صفحة الويب بما في ذلك العقدة إذا كان موجودا

والطريقة الصحيحة هي في الواقع:

وwebBrowser1.DocumentText

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top