2013-03-05 79 views
13

为什么从jQuery 1.9.1以后的代码段不起作用?与以前的版本工作正常。

$(function() { 
    $(document).append(test); 
    document.write('done'); 
}); 
var test = { 
    version: "1.0", 
}; 

的jsfiddle:http://jsfiddle.net/Chessjan/NsjqM/

在JS控制台会发出错误是这样的:

TypeError: document is null 
safeFrag = document.createDocumentFragment(); jquery-1.9.1.js (line 5823) 

编辑:

谢谢大家快速和广泛的aswers。观察到的问题是偶然发现的,当然,$(document.body).append()是正确的方法。

+3

你通常会把东西追加到'head'或'body'。将任何东西附加到'document'的任何特定原因? – 2013-03-05 10:30:55

+8

真正的奥秘在于为什么它应该在第一个地方工作。 – 2013-03-05 10:34:46

+1

我很困惑,我们可以追加到文件吗?因为我认为,文档不是像'body'或'html'标签那样的元素(或标签)。 – 2013-03-05 10:59:45

回答

15

的jQuery 1.9.x的要求

this[ 0 ].ownerDocument 

buildFragment()方法中。既然你在document传递,呼叫

document.ownerDocument 

将参考null而导致的错误。任何其他节点将引用document,这当然是有效的。


结论:不要叫$(document).append()但使用$(document.body)例如。

+0

其他答案也是正确的,但这一个确切解释问题的来源。谢谢。 – Chessjan 2013-03-05 11:45:07

+0

+1好的解释朋友 – 1Mayur 2013-05-07 07:31:04

1

要回答你的问题,我在JSfiddle中尝试了所有可用的jQuery版本。它碰巧给出了同样的错误。

为什么它不起作用:当将文档转换为字符串时,文档变成类似于[object HTMLDocument]的东西,并且当然没有这样的id,它将返回null。

以下工作:

var test = "1.0" 
$('body').append(test); 

或做槽对象符号像你这样:

var test = { 
    version: '1.0' 
} 
$('body').append(test.version) 
+0

当然是更好的方法,但也不回答这个问题。 – jtheman 2013-03-05 10:37:35

+1

你是对的所以我编辑它以某种方式回答这个问题感谢您的反馈使我更好地阅读这个问题=)有一个愉快的一天 – 2013-03-05 10:56:49

+0

不客气( - :+1 – jtheman 2013-03-05 11:00:58

1

内部jQuery代码它具有这一行:

jQuery.buildFragment(args, this[ 0 ].ownerDocument, false, this); 

this是所选jQuery对象。在你的情况下,该文件。文档的ownerDocument值为null,这是通过document传递给document.createDocumentFragment();的呼叫的内容。因此,你得到document为空的错误(变量的命名稍差,因为它使你认为文档对象本身在某种程度上是空的)

正如其他人所说的那样。追加到身体,而不是它的工作正常。

相关问题