Wie kommt es, dass die Gleichung im Titel falsch ist? Wie überprüfen Sie, ob zwei jQuery-Selektoren auf dasselbe DOM-Objekt zeigen?
Antwort
Sie vergleichen zwei verschiedene jQuery Objekte, da $()
zweimal anrufen (einmal für jede Seite der Gleichung), und jQuery as MooGoo explains schafft neue Wrapper-Objekte für jedes Mal, wenn Sie es nennen. Deshalb endet der Vergleich falsch.
Sie können ein DOM-Objekt aus jedem jQuery-Objekt extrahieren, indem Sie entweder get()
oder Array-Dereferenzierung verwenden, und dann diese Elemente vergleichen. Die beiden folgenden return true, da beide identisch Selektoren die gleiche body
DOM-Element entsprechen:
$('body').get(0) == $('body').get(0)
$('body')[0] == $('body')[0]
Wenn Sie gegen einen jQuery-Selektor testen möchten, verwenden Sie is()
. Beachten Sie, dass die Selektoren, die Sie verwenden, nicht unbedingt denselben DOM-Elementen entsprechen müssen (es sei denn, die Selektoren sind identisch). Das gibt auch true zurück:
$('body').is('body')
Verwenden $ .ist()
die aktuelle aufeinander abgestimmten Satz von Elementen Prüfung gegen einen Selektor, Element oder Objekt jQuery und Rück
true
, wenn mindestens eines dieser Elemente entspricht der gegebene Argumente ...Im Gegensatz zu anderen Filtermethoden erstellt
.is()
kein neues jQuery-Objekt. Stattdessen können Sie den Inhalt eines jQuery-Objekts ohne Änderung testen. Dies ist oft nützlich, innerhalb Rückrufe, wie Event-Handler ...
Siehe andere Antworten für die tatsächliche Erklärung, warum Sie $ .is() benötigen. – pettazz
Da jQuery ein neues Wrapper-Objekt erstellt für jede $
Anruf, und in Javascript alle Objekte sind verschieden, auch wenn sie genau die gleichen Eigenschaften/Methoden .
Auf der anderen Seite würde document.body == document.body
zu true
bewerten.
Sie haben zuerst die Erstellung des Wrapperobjekts erläutert. +1 –
Yup, gab meine Stimme aus dem gleichen Grund. – BoltClock
- 1. Warum gibt is_array() false zurück?
- 2. Warum gibt os.path.isfile False zurück?
- 3. Warum gibt string.contains() false zurück?
- 4. Warum gibt file_exists() false zurück?
- 5. $ ("body"). Ready() funktioniert aber $ ("body"). Load() funktioniert nicht?
- 6. SignedXml checksignature gibt false zurück.
- 7. Immutable.Set.contains gibt false zurück
- 8. Warum gibt mein sinon false Server nichts zurück?
- 9. SCDynamicStoreSetValue gibt false zurück
- 10. Warum gibt dieser Vergleich false zurück?
- 11. Warum gibt isNaN (123.) False zurück?
- 12. Warum gibt dieser Code log false zurück?
- 13. Warum gibt System.IO.File.Exists (string path) false zurück?
- 14. Warum gibt meine Form_validation immer FALSE zurück?
- 15. Warum gibt meine Datei.mkdirs() immer false zurück?
- 16. Warum gibt Utf8Helper :: setCollatorLanguage immer false zurück?
- 17. Warum gibt QFile :: canReadLine() immer false zurück?
- 18. Warum Integer.respond_to? (: Even?) Gibt false zurück?
- 19. Warum gibt Bob instanceof false zurück?
- 20. In html eingebettetes Rebol-Skript: Warum gibt es</body> zurück?
- 21. Meteor: body backgroundimage
- 22. Javascript entspricht $ ('body')
- 23. Wie programmatisch Post-Body (Body Data) mit Jmeter API hinzufügen?
- 24. Gibt es einen Vorteil Body-ID statt Body-Index in Kinect SDK 2.0
- 25. UIElement.IsMouseOver gibt false zurück
- 26. Xpath Gibt false zurück
- 27. Openssl_private_encrypt gibt FALSE zurück
- 28. preferences.getKey.equals() gibt false zurück
- 29. string.matches (". *") Gibt false zurück
- 30. json_encode() gibt false zurück
Der erste Satz ist nur dann klar, wenn Sie bereits wissen, dass die $() - Funktion NEW-Objekte erzeugt, daher ist MooGoo's Antwort etwas erklärender. Wenn ich 'function a() {return true; } ', dann ist' a() == a() 'wahr. –
@ Jonathon: Du hast Recht. Ich werde auch meine Antwort klären. – BoltClock
Falls es oben nicht klar ist, testet 'is' die Gleichheit nicht, es testet, ob mindestens ein Element in der Menge mit dem gegebenen Selektor übereinstimmt. ZB '$ ('# cb'). Is (': checked')'. – Flash