2

当我制作它时会触发此事件:

$(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?

4

3 回答 3

1

如果您想要所有内容,包括DOCTYPE并了解它是生成源而不是原始源,则可以document.

$(document).on('dblclick', function() {
    alert(new XMLSerializer().serializeToString(document));
});
于 2013-07-20T17:24:30.740 回答
0

试试这段代码:

$(document).on('dblclick', function() {
    alert($('html').html());
});
于 2013-07-20T17:02:35.243 回答
-1

document不是一个元素,所以它没有办法将自己呈现为 HTML。目前没有兼容的方式来获取整个实际源,缺少对当前 URL 的 Ajax 请求——即使这样也可能不会返回相同的内容。

$('html').html()将为您提供<html>标签内的所有内容。在大多数情况下,这已经足够了。加上一个<!DOCTYPE html>,你就拥有了一个有效的 HTML 文档(假设原始源代表一个)。

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

对于现代浏览器,anew XMLSerializer可能会为您提供文档的当前内容。但是,它在 IE8 中不起作用。

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

于 2013-07-20T17:03:08.967 回答