15

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)

編集:

迅速かつ広範な回答をありがとうございました。観察された問題は偶然発見されたものであり、もちろん$(document.body).append()適切なアプローチです。

4

4 に答える 4

16

jQuery 1.9.x 呼び出し

this[ 0 ].ownerDocument

そのbuildFragment()方法の中で。を渡すのでdocument、呼び出し

document.ownerDocument

を参照しnull、エラーの原因となります。他のノードは を参照しますがdocument、これはもちろん機能します。


結論: 呼び出すのでは$(document).append()なく、例として使用$(document.body)します。

于 2013-03-05T10:41:06.703 に答える
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 で) で動作するコード: http://jsfiddle.net/us9Kz/6/

于 2013-03-05T10:42:05.633 に答える
1

あなたの質問に答えるために、私はJSfiddleで利用可能なすべてのjQueryバージョンを試しました。たまたま同じエラーが発生しました。

動作しない理由:文字列にキャストすると、ドキュメントは[object HTMLDocument]のようになります。もちろん、そのようなIDはないため、nullが返されます。

次の作品:

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

または、あなたがしたようにオブジェクト表記を介してそれを行います:

var test = {
    version: '1.0'
}
$('body').append(test.version)
于 2013-03-05T10:35:27.013 に答える
1

jQuery コード内には、次の行があります。

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

this選択した jQuery オブジェクトです。あなたの場合、ドキュメント。document の ownerDocument 値は null であり、これがdocumentへの呼び出しとして渡されdocument.createDocumentFragment();ます。したがって、documentnull であるというエラーが発生します (ドキュメント オブジェクト自体が何らかの形で null であると思わせるため、変数の命名が少し不適切です)。

他の人が言ったように。代わりに本体に追加すると、正常に機能します。

于 2013-03-05T10:43:31.587 に答える