web-dev-qa-db-ja.com

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…]

これは、jqueryuiのドロップイベント内で、ネストされたドロップ可能オブジェクトにドロップしようとすると発生します。

$.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>
23
shuji

dOMにjQueryが実行されている要素がない場合、jQueryはprevObjectを返します。実行時にソースに要素が表示される場合がありますが、DOMにバインドされていないため、prevObjectが表示されます。 jsファイルをもう一度確認するか、ここにコードを貼り付けてください。

20
Ami

エラーは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/

9
Northnroro