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

What is prevObject and why is my selector returning that?

本文关键字:选择器 返回 我的 为什么 prevObject 什么      更新时间:2023-09-26

我正在尝试从元素中获取顶部,但是我收到此错误,这是什么意思以及如何摆脱它?

$(".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…]

当我尝试将其放入嵌套的可放置对象时,这发生在 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>
如果 DOM 没有运行 jQuery

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

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

jQuery .end()

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

为了返回其先前的状态,jQuery 在应用过滤操作(如 .find().filter().children())之前返回包含选定元素prevObject

$('#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/