Подтвердить что ты не робот

Что такое 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…]

Это происходит внутри события drop jqueryui, когда я пытаюсь удалить его в вложенный droppable.

$.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>
4b9b3361

Ответ 1

jQuery возвращает prevObject, если DOM не имеет элемента, для которого выполняется jQuery. Вы можете увидеть элемент в своем источнике во время выполнения, однако он не связан с DOM, и поэтому он показывает prevObject. Попробуйте снова проверить файл js или вставить здесь код.

Ответ 2

Хотя ошибка не связана с 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'). Поэтому он будет возвращать все элементы div, такие же, как в (* 1), за исключением того, что все входные элементы внутри divs удалены. Возвращенные элементы хранятся в prevObject.

Наконец, возвращаемые элементы (* 1) добавляются к #target.


.end() документация: https://api.jquery.com/end/