Что такое 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>
Ответы
Ответ 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/