2013-03-05 8 views
13

jQuery 1.9.1以降、次のコードが動作しないのはなぜですか?以前のバージョンでうまく動作します。

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

JSFiddle:

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

編集:迅速かつ広範aswersため

おかげでみんなJSコンソールでhttp://jsfiddle.net/Chessjan/NsjqM/

それは、このようなエラーを発行します。観察された問題は事故によって発見され、もちろん、$(document.body).append()は適切なアプローチです。

+3

通常は、 'head'や' body'にstuffを追加します。 'document'に物を追加する特別な理由はありますか? –

+8

本当のミステリーはなぜ最初に働いていたのでしょうか。 –

+1

私は事前に書かれていますが、文書に追加することはできますか?ドキュメントは 'body'や' html'タグのような要素(タグ)ではありません。 –

答えて

15

jQueryの1.9.xは、そのbuildFragment()メソッド内

this[ 0 ].ownerDocument 

を呼び出します。あなたはdocumentに渡しているので、呼び出し

document.ownerDocument 

nullに参照するとエラーが発生します。他のどのノードもdocumentを参照しますが、もちろん動作します。


結論:$(document).append()を呼び出すが、例えば$(document.body)を使用しないでください。

+0

他の回答も正しかった問題の原因を説明しました。ありがとう。 – Chessjan

+0

+1素晴らしい説明pal – 1Mayur

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

+1

あなたは正しいので、私は何とか質問に答えるためにそれを編集しましたあなたのフィードバックのために私はより良い質問を読む=)良い日を持って –

+0

あなたは歓迎です( - :+1 – jtheman

3

コードはで、決してとなります。それはdocument.bodyではなく、documentです。

はここで働いていないことの異なるバージョンでは、いくつかの例です:

のjQuery 1.6.4:http://jsfiddle.net/us9Kz/
のjQuery 1.7.2:http://jsfiddle.net/us9Kz/1/
のjQuery 1.8.3:http://jsfiddle.net/us9Kz/3/
のjQuery 1.9。 1:http://jsfiddle.net/us9Kz/4/
jQueryの2.0.0b1:http://jsfiddle.net/us9Kz/5/

コードはdocument.bodyで動作します(jQuery 1.9では。1):

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

thisは、あなたが選択したjQueryオブジェクトです:jQueryのコードの中http://jsfiddle.net/us9Kz/6/

1

それは、このラインを持っています。あなたの場合は、文書。 documentのownerDocument値はnullで、これはdocument.createDocumentFragment();への呼び出しにdocumentとして渡されます。他の人が言ったようにそのため、あなたは(それはあなたがドキュメントオブジェクト自体は何とかnullであると思わせるようが変数の少し悪い命名)documentがNULLであること

をエラーが発生します。代わりに体に付け加えれば正常に動作します。

関連する問題