Ich möchte die Beziehung zwischen dem jQuery-Objekt und dem DOM-Element verstehen.
Wenn jQuery ein Element zurückgibt, wird es wie [object Object]
in einer Warnung angezeigt. Wenn getElementByID
ein Element zurückgegeben wird, wird es als angezeigt [object HTMLDivElement]
. Was bedeutet das genau? Ich meine, sind beide Objekte unterschiedlich?
Welche Methoden können auch für jQuery-Objekte und DOM-Elemente ausgeführt werden? Kann ein einzelnes jQuery-Objekt mehrere DOM-Elemente darstellen?
javascript
dom
jquery
testndtv
quelle
quelle
Antworten:
Ein jQuery-Objekt ist ein Array-ähnliches Objekt, das DOM-Elemente enthält. Ein jQuery-Objekt kann je nach verwendetem Selektor mehrere DOM-Elemente enthalten.
jQuery-Funktionen (eine vollständige Liste finden Sie auf der Website) werden für jQuery-Objekte und nicht für DOM-Elemente ausgeführt. Sie können auf die DOM-Elemente innerhalb einer jQuery-Funktion
.get()
zugreifen, indem Sie das Element am gewünschten Index verwenden oder direkt darauf zugreifen:$("selector")[0] // Accesses the first DOM element in this jQuery object $("selector").get(0) // Equivalent to the code above $("selector").get() // Retrieve a true array of DOM elements matched by this selector
Mit anderen Worten, mit dem folgenden Ergebnis sollten Sie das gleiche Ergebnis erzielen:
<div id="foo"></div> alert($("#foo")[0]); alert($("#foo").get(0)); alert(document.getElementById("foo"));
Weitere Informationen zum jQuery-Objekt finden Sie in der Dokumentation . Lesen Sie auch die Dokumentation für
.get()
quelle
Wenn Sie jQuery verwenden, um ein DOM-Element abzurufen, enthält das zurückgegebene jQuery-Objekt einen Verweis auf das Element. Wenn Sie eine native Funktion wie verwenden
getElementById
, erhalten Sie den Verweis direkt auf das Element, das nicht in einem jQuery-Objekt enthalten ist.Ein jQuery-Objekt ist ein Array-ähnliches Objekt, das mehrere DOM-Elemente enthalten kann:
var jQueryCollection = $("div"); //Contains all div elements in DOM
Die obige Zeile könnte ohne jQuery ausgeführt werden:
var normalCollection = document.getElementsByTagName("div");
Genau das macht jQuery intern, wenn Sie einen einfachen Selektor wie übergeben
div
. Sie können mit der folgendenget
Methode auf die tatsächlichen Elemente in einer jQuery-Auflistung zugreifen :var div1 = jQueryCollection.get(0); //Gets the first element in the collection
Wenn Sie ein Element oder eine Gruppe von Elementen in einem jQuery-Objekt haben, können Sie eine der in der jQuery-API verfügbaren Methoden verwenden, während Sie bei Verwendung des Raw-Elements nur native JavaScript-Methoden verwenden können.
quelle
Ich habe letzten Monat gerade erst angefangen, mit jQuery zu spielen, und ich hatte eine ähnliche Frage im Kopf. Alle Antworten, die Sie bisher erhalten haben, sind gültig und pünktlich, aber eine sehr genaue Antwort kann folgende sein:
Angenommen, Sie befinden sich in einer Funktion, und um auf das aufrufende Element zu verweisen, können Sie entweder
this
oder verwenden$(this)
. aber was ist der Unterschied? Es stellte sich heraus, wenn Sie$(this)
, Sie Verpackung sindthis
in einem jQuery - Objekt. Der Vorteil besteht darin, dass Sie, sobald ein Objekt ein jQuery-Objekt ist, alle jQuery-Funktionen darauf verwenden können.Es ist ziemlich mächtig, da Sie sogar eine Zeichenfolgendarstellung von Elementen
var s = '<div>hello <a href='#'>world</a></div><span>!</span>'
in ein jQuery-Objekt einschließen können, indem Sie es buchstäblich in $ () einschließen :$(s)
. Jetzt können Sie alle diese Elemente mit jQuery bearbeiten.quelle
Die meisten jQuery-Mitglieder
Functions
haben keinen Rückgabewert, sondern geben den aktuellenjQuery Object
oder einen anderen zurückjQuery Object
.Damit,
console.log("(!!) jquery >> " + $("#id") ) ;
wird zurückkehren
[object Object]
, dh a,jQuery Object
das die Sammlung beibehält, die das Ergebnis der Bewertung des SelektorsString
("#id"
) gegen das istDocument
,während,
console.log("(!!) getElementById >> " + document.getElementById("id") ) ;
wird zurückgeben
[object HTMLDivElement]
(oder tatsächlich[object Object]
im IE), weil / wenn der Rückgabewert a istdiv
Element
.(1)
Function
In jQuery gibt es eine Vielzahl von Mitgliedern , die sich auf DOMs beziehenObject
. Imo durchsuchen Sie am besten die jQuery-API-Dokumentation nach einer relevantenFunction
Aufgabe, sobald Sie eine bestimmte Aufgabe haben (z. B.Node
s auswählen oder bearbeiten).(2) Ja, ein einzelner
jQuery Object
kann eine Liste mehrerer DOMs führenElement
. Es gibt mehrereFunctions
(wiejQuery.find
oderjQuery.each
), die auf diesem automatischen Caching-Verhalten aufbauen.quelle
[object Object]
wäre das allerdings noch eindiv
Element
. Bei Auswahl mit jQuery wäre es ajQuery Object
.Das ist nur, dass Ihr Browser klug ist. Sie sind beide Objekte, aber DOMElements sind spezielle Objekte. jQuery verpackt DOMElements nur in ein Javascript-Objekt.
Wenn Sie weitere Debug-Informationen erhalten möchten, empfehlen wir Ihnen, sich Debugging-Tools wie Firebug for Firefox und den integrierten Inspektor von Chrome (sehr ähnlich zu Firebug) anzusehen.
quelle
Neben dem, was erwähnt wurde, möchte ich etwas darüber hinzufügen, warum das jQuery-Objekt gemäß der Beschreibung aus dem jquery-Objekt importiert wird
Beispielsweise
innerHTML
funktioniert die Elementmenge in den meisten Versionen von Internet Explorer möglicherweise nicht.Sie können innerHTML auf jQuery-Weise festlegen, und jQuery hilft Ihnen dabei, die Unterschiede des Browsers zu verbergen.
// Setting the inner HTML with jQuery. var target = document.getElementById( "target" ); $( target ).html( "<td>Hello <b>World</b>!</td>" );
jQuery bietet eine Liste von Methoden, die an das jQuery-Objekt gebunden sind, um die Entwicklererfahrung zu verbessern . Einige davon finden Sie unter http://api.jquery.com/ . Die Website bietet auch eine allgemeine DOM-Manipulation. Sehen wir uns an, wie Sie ein Element, das
newElement
nach demtarget
Element gespeichert ist, auf beide Arten einfügen .Der DOM-Weg,
// Inserting a new element after another with the native DOM API. var target = document.getElementById( "target" ); var newElement = document.createElement( "div" ); target.parentNode.insertBefore( newElement, target.nextSibling );
Der jQuery-Weg,
// Inserting a new element after another with jQuery. var target = document.getElementById( "target" ); var newElement = document.createElement( "div" ); $( target ).after( newElement );
Hoffe das ist eine Ergänzung.
quelle