为什么$(document).append()在jQuery 1.9.1中不起作用?
为什么从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)
编辑:
感谢大家快速和广泛的as。 观察到的问题是偶然发现的,当然, $(document.body).append()
是正确的方法。
jQuery 1.9.x调用
this[ 0 ].ownerDocument
在其buildFragment()
方法中。 由于您传入了document
,因此调用
document.ownerDocument
将引用null
并导致错误。 任何其他节点都将引用该document
,这当然是有效的。
结论:不要调用$(document).append()
而是使用$(document.body)
。
你的代码永远不会奏效。 它必须是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/
在jQuery代码中,它有这一行:
jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this );
this
是您选择的jQuery对象。 在您的情况下,文档。 document的ownerDocument值为null,这是作为document.createDocumentFragment();
的调用传递给document.createDocumentFragment();
。 因此,您得到document
为null的错误(变量的命名稍差,因为它使您认为文档对象本身在某种程度上为null)
正如其他人所说的那样。 附加到身体,它会正常工作。
为了回答你的问题,我在JSfiddle尝试了所有可用的jQuery版本。 碰巧给出了同样的错误。
为什么它不起作用:当转换为字符串时,文档变成类似[object HTMLDocument]的东西,当然没有这样的id,它将返回null。
以下作品:
var test = "1.0" $('body').append(test);
或者通过像你这样的对象符号来做:
var test = { version: '1.0' } $('body').append(test.version)