无法获得$(document).html()

时间:2013-07-20 17:00:35

标签: javascript jquery domdocument innerhtml

当我这样做时会触发此事件:

$(document).on('dblclick', function() {
    alert($(document).html());
});

但是在控制台中抛出异常:

Timestamp: 20.7.2013 18:59:35
Error: TypeError: t is null
Source File: http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js
Line: 5

这是一个 jQuery 相关问题,还是我使用错误的方法来获取当前HTML文档的整个HTML?

3 个答案:

答案 0 :(得分:1)

如果您想要所有内容,包括 DOCTYPE 并了解它是生成源而非原始来源,您可以document使用XMLSerializer

$(document).on('dblclick', function() {
    alert(new XMLSerializer().serializeToString(document));
});

答案 1 :(得分:0)

请尝试使用此代码:

$(document).on('dblclick', function() {
    alert($('html').html());
});

答案 2 :(得分:-1)

document不是元素,因此无法将自身呈现为HTML。目前没有兼容的方法来获取整个实际的源代码,缺少对当前URL的Ajax请求 - 甚至可能不会返回相同的内容。

$('html').html()将为您提供<html>标记内的所有内容。在大多数情况下,这是充足的。粘贴<!DOCTYPE html>,你自己有一个有效的HTML文档(假设原始来源代表一个)。

document.documentElement.outerHtml获取文档的大多数。这将包括<html>标记,但不包括任何有效的标记。具体来说,它不会为您提供doctype或任何出现在之前或之后的评论。

对于现代浏览器,new XMLSerializer可以获取文档的当前内容。但它在IE8中不起作用。

当然,所有这些告诉浏览器HTML化文档的方法,在浏览器理解它们时返回内容 。浏览器可能会破坏无效的HTML以使其适合文档。例如,<body>元素之后出现的内容可能会移动到其中。