45

我正在自学 AJAX 来 AJAXify 我的网站。在我的模板中,我有以下 JS 代码从视图中获取一些 JSON 数据,然后将数据附加到 div。

function filter(type) {
  $.getJSON(
    '/activity_stream/global-activity-stream/', 
    {xhr: "true", filter: type}, 
    function(data) {
      $('.mainContent').children().remove();
      $(data).appendTo('.mainContent');
    });
  }

  $(".btn").click(function () { 
    filter("recent"); 
  });
}

我认为我的视图正在返回正确的 JSON,但现在没有将数据添加到.mainContentdiv 中。

它给出了这个错误:

未捕获的类型错误:无法读取未定义的属性“ownerDocument”。

4

6 回答 6

51

确保将选择器传递给 jQuery,而不是某种形式的数据:

$( '.my-selector' )

不是:

$( [ 'my-data' ] )
于 2013-10-05T20:55:28.277 回答
19

我有一个类似的问题。我正在使用 jQuery.map 但我忘了在最后使用 jQuery.map(...).get() 来处理普通数组。

于 2014-11-23T01:01:57.457 回答
3

如果您要附加到 DOM,请确保内容兼容:

modal.find ('div.modal-body').append (content) // check content
于 2018-08-29T17:36:32.727 回答
3

同样的问题出现在我里面$elms.each()

因为:

  1. 您传递给的函数.each(Function)公开(至少)两个参数;第一个是索引,第二个是列表中当前元素中的元素,并且
  2. 因为其他类似的循环方法在索引之前给出了当前数组中的元素

你可能很想这样做:

$elms.each((item) => $(item).addClass('wrong'));

当这是你需要的:

$elms.each((index, item) => $(item).addClass('wrong'));
于 2017-04-07T16:30:25.860 回答
1

如果你使用 ES6 anon 函数,它会与$(this)

这有效:

$('.dna-list').on('click', '.card', function(e) {
  console.log($(this));
});

这不起作用:

$('.dna-list').on('click', '.card', (e) => {
  console.log($(this));
});
于 2019-03-11T23:13:08.483 回答
0

就我而言,发生此错误是因为我的 HTML 有一个尾随换行符。

var myHtml = '<p>\
    This should work.\
    But does not.\
</p>\
';

jQuery('.something').append(myHtml); // this causes the error

为避免该错误,您只需修剪 HTML。

jQuery('.something').append(jQuery.trim(myHtml)); // this works
于 2020-10-22T18:14:22.850 回答