2017-05-03 4 views
0

Ich benutze jQuery und möchte eine Liste von hovered Elemente in einem Array speichern. Der Code, den ich verwende, ist unten (Sie können es in ein leeres HTML-Dokument einfügen, es zu testen):indexOf ein jQuery-Objekt gibt immer zurück -1

<div class="element" style="width:100px;height:100px;border:1px solid black;"></div> 
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 
<script> 
var hovered = []; 
$(document).ready(function(){ 
    $(".element").hover(function(){ 
     hovered.push($(this)); 
     console.log(hovered.indexOf($(this))); 
    }); 
}); 
</script> 

Immer, wenn ich über die div schweben, -1 immer an der Konsole angemeldet wird. Warum ist dies und was ist eine mögliche Problemumgehung?

+2

Weil '{} === {} // false' zwei Objekte niemals gleich sind. –

+0

Sie erstellen zwei verschiedene Objekte. der, den du schiebst und den du suchst. –

Antwort

0

ändern es zu

hovered.push(this) 

und

hovered.indexOf(this) 
+0

Wie ist das eine gute Lösung? Er sollte einfach 'this' verwenden ODER einen Verweis auf das erstellte jQuery-Objekt behalten, es drücken und es bei der Suche verwenden. –

+0

Ja sicher kann er nur das verwenden und das Dom-Element behalten – quirimmo

-1

Sie sind zwei verschiedene jQuery Erstellen von Objekten, die man Sie drücken, und diejenige, die Sie Pass zu indexOf (..)

Ändern Sie Ihren Code wie folgt:

$(document).ready(function(){ 
    $(".element").hover(function() { 
     var $this = $(this); 

     hovered.push($this); 

     console.log(hovered.indexOf($this)); 
    }); 
});