2013-03-05 78 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爲空的錯誤(變量的命名稍差,因爲它使你認爲文檔對象本身在某種程度上是空的)

正如其他人所說的那樣。追加到身體,而不是它的工作正常。

相關問題