什么是prevObject,为什么我的选择器会返回?

我试图从一个元素获得顶部,但我得到这个错误,它意味着什么,我该如何摆脱它?

$(".hover").offset().top >Uncaught TypeError: Cannot read property 'top' of undefined $(".hover") [div.hover, prevObject: x.fn.x.init[1], context: document, selector: ".hover", jquery: "2.0.3", constructor: function…] [prevObject: x.fn.x.init[1], context: document, selector: ".hover", jquery: "2.0.3", constructor: function…] 

当我尝试将其放入嵌套的droppable中时,这会发生在jqueryui的drop事件中。

 $.fn.makeDroppable = function(){ $(this).droppable({ drop: function(event, ui) { console.log($(".hover")); console.log($(".hover").offset().top); $(".hover").makeDroppable().removeClass("hover"); }, over: function(event, ui) { $("
").addClass("hover").appendTo(this); } }); } $(".container").makeDroppable();

如果DOM没有运行jQuery的元素,jQuery将返回prevObject。 您可能在运行时看到源中的元素,但是它没有绑定到DOM,因此它显示了prevObject。 尝试再次检查您的js文件,或者在此处粘贴代码。

虽然错误与prevObject ,但我会解释它,因为它是标题中的一个问题。

jQuery .end()

结束当前链中最近的过滤操作,并将匹配元素集返回到先前的状态。

要返回其先前的状态,jQuery将返回包含选定元素的prevObject ,其中包含.find() .filter().find()之前的选定元素。

 $('#target').append($('div').find('input').remove().end()); 

$('div')将选择所有div元素。 — (* 1)

然后, $('div').find('input').remove()将选择所选div元素中的所有输入元素并删除这些输入元素。

之后, $('div').find('input').remove().end()将在.find('input')之前返回元素。 因此,除了div中的所有输入元素都被删除之外,它将返回与(* 1)中相同的所有div元素。 返回的元素存储在prevObject

最后,返回的元素(* 1)被附加到#target


.end()的文档: https : //api.jquery.com/end/