我正在尝试从元素中获取顶部但我收到此错误,这意味着什么以及如何摆脱它?
$(".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) {
$("<div>").addClass("hover").appendTo(this);
}
});
}
$(".container").makeDroppable();
<div class="container"></div>
答案 0 :(得分:20)
如果DOM没有运行jQuery的元素,jQuery将返回prevObject。您可能会在运行时看到源中的元素,但它并未绑定到DOM,因此它显示了prevObject。尝试再次检查您的js文件,或者在此处粘贴代码。
答案 1 :(得分:8)
虽然错误与prevObject
无关,但我会解释它,因为它是标题中的问题。
jQuery .end()
结束当前链中最近的过滤操作,并将匹配元素集返回到先前的状态。
要返回其先前的状态,jQuery将返回包含所选元素的prevObject
,其中包含过滤操作,例如.find()
,.filter()
和.children()
。
示例强>
$('#target').append($('div').find('input').remove().end());
$('div')
将选择所有div元素。 --- (* 1)
然后,$('div').find('input').remove()
将选择所选div元素中的所有输入元素并删除这些输入元素。
之后,$('div').find('input').remove().end()
将在调用.find('input')
之前返回元素。因此,它将返回与(* 1)相同的所有div元素,除了div中的所有输入元素都被删除。
返回的元素存储在prevObject
。
最后,返回的元素(* 1)会附加到#target
。
.end()
的文档:https://api.jquery.com/end/