【问题标题】:Why $(document).append() doesn't work in jQuery 1.9.1?为什么 $(document).append() 在 jQuery 1.9.1 中不起作用?
【发布时间】:2013-03-05 10:29:26
【问题描述】:

为什么从 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()是正确的做法。

【问题讨论】:

  • 您通常将内容附加到headbody。将内容附加到document 的任何具体原因?
  • 真正的谜团是为什么它应该首先起作用。
  • 我很困惑,我们可以附加到文档吗?因为我认为,文档不是像bodyhtml 标签这样的元素(或标签)。

标签: javascript jquery


【解决方案1】:

jQuery 1.9.x 调用

this[ 0 ].ownerDocument

在其buildFragment() 方法中。既然你传入document,调用

document.ownerDocument

将引用null 并导致错误。任何其他节点都会引用document,这当然可以。


结论:例如不要调用$(document).append(),而是使用$(document.body)

【讨论】:

  • 其他答案也是正确的,但这一个准确地解释了问题的根源。谢谢。
【解决方案2】:

您的代码永远不会工作。它必须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/

【讨论】:

    【解决方案3】:

    在 jQuery 代码里面有这样一行:

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

    this 是您选择的 jQuery 对象。在你的情况下,文件。 document 的 ownerDocument 值为 null,这是作为 document 传递给对 document.createDocumentFragment(); 的调用的内容。因此,您会收到 document 为 null 的错误(那里的变量命名有点错误,因为它让您认为文档对象本身在某种程度上为 null)

    正如其他人所说。改为附加到正文中,它会正常工作。

    【讨论】:

      【解决方案4】:

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

      为什么不起作用:document转换为字符串时变成[object HTMLDocument]之类的东西,当然没有这样的id,它会返回null。

      以下作品:

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

      或者像你一样通过对象表示法来做:

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

      【讨论】:

      • 当然是更好的方法,但也没有回答问题。
      • 你是对的,所以我以某种方式对其进行了编辑以回答问题,感谢您的反馈让我更好地阅读了问题=)祝你有美好的一天
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-07
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多