web-dev-qa-db-fra.com

Qu'est-ce que prevObject et pourquoi mon sélecteur le renvoie-t-il?

J'essaie d'obtenir le haut d'un élément mais j'obtiens cette erreur, qu'est-ce que cela signifie et comment m'en débarrasser?

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

Cela se produit à l'intérieur de l'événement drop de jqueryui lorsque j'essaie de le déposer dans un dropper imbriqué.

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

jQuery renvoie prevObject si le DOM ne possède pas l'élément pour lequel jQuery est exécuté. Vous pouvez voir l'élément dans votre source au moment de l'exécution, cependant, il n'est pas lié au DOM et, par conséquent, il affiche prevObject. Essayez de vérifier à nouveau votre fichier js ou bien collez le code ici.

20
Ami

Bien que l'erreur ne soit pas liée à prevObject, je vais l'expliquer car c'est une question dans le titre.

jQuery .end ()

Mettez fin au filtrage le plus récent de la chaîne en cours et remettez l'ensemble des éléments correspondants à son état précédent.

Pour retourner son état précédent, jQuery renvoie prevObject qui contient les éléments sélectionnés avant l'opération de filtrage, tels que .find(), .filter() et .children(), est appliqué .

Exemple

$('#target').append($('div').find('input').remove().end());

$('div') sélectionnera tous les éléments div. --- (* 1)

Ensuite, $('div').find('input').remove() sélectionnera tous les éléments d'entrée à l'intérieur des éléments div sélectionnés et supprimera ces éléments d'entrée.

Après cela, $('div').find('input').remove().end() renverra les éléments avant d'appeler .find('input'). Par conséquent, il retournera tous les éléments div de la même manière que dans (* 1) sauf que tous les éléments d'entrée à l'intérieur des divs sont supprimés. Les éléments retournés sont stockés dans prevObject.

Enfin, les éléments retournés (* 1) sont ajoutés à #target.


.end(): https://api.jquery.com/end/

9
Northnroro