Keine getElementById für den Körper?
Diese Frage hat mich gestört, für eine lange Zeit. Sorry wenn es eine dumme Frage.
Vor, ich habe gewusst, dass Sie können die Elemente mit einem Klassennamen
document.body.getElementsByClassName("foo");
Und ich war so faul, so dass ich nur kopiert und eingefügt, den code zu, der andere Teil dies zu tun
document.body.getElementById("bar");
Ich zufällig gefunden, es wird nicht funktionieren. Ich habe das getestet und es sagt
TypeError: Object #<HTMLBodyElement> hat keine Methode "getElementById'
So, warum es getElementsByClassName
undgetElementsByTagName
und alle, die ähnliche Methoden, aber nur keine getElementById
?
typeof document === typeof document.body //true
Ihre Typen sind die gleichen, so sollten Sie die gleiche Sache. Aber es scheint nicht der Fall zu sein.
typeof
ist "object"
für beide, das heißt, Sie können auf jeden Art der Objekte. Es sagt Ihnen nicht viel über die Methoden, die Sie haben."Die Typen sind die gleichen, so sollten Sie die gleiche Sache." Nein. Sie sind sowohl Objekte, aber nicht alle Objekte teilen sich die gleichen Eigenschaften/Methoden.
Empfehlung, nie check-Typen in javascript zu sehen, wenn Dinge sind die gleichen, Durchlaufen Sie die Eigenschaften und überprüfen Sie Sie. Da
typeof document === typeof document.body === typeof null === typeof [] === "object"
InformationsquelleAutor Derek 朕會功夫 | 2012-06-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie mehrere Elemente mit dem gleichen Klassen-Namen, damit die Eingrenzung der Suche zu beginnen mit einem bestimmten Knoten Sinn machen.
Es nicht sinnvoll ist, mit der id, denn es sollte eindeutig sein.
Können Sie nur eine
id
imdocument
, deshalbgetElementById
ist eine Methode derdocument
.Beispiel:
Starten Sie die Suche für Klasse
a
aus dem Knoten<div id="start">
geben Sie ein element,Während, wenn Sie würde haben, starten aus der top-Knoten - Dokument, es würde haben endete mit zwei Elementen.
In Bezug auf die
typeof
Vergleich:typeof
überprüft nur den Typ, nicht der Wert,document
unddocument.body
sind sowohl Objekte, sondern verschiedene Objekte.Wie Sie sehen können,
null
unddocument
teilen die gleiche Art, aber Sie haben den gleichen Methoden...? KEINEInformationsquelleAutor gdoron
Ids sind einzigartig für das gesamte Dokument, daher macht es keinen Sinn zu Umfang Sie zu Kindern, die Knoten des Dokuments.
Class-Namen nicht eindeutig sind, und es gibt Anwendungsfälle, Sinn zu finden, Elemente mit Klassennamen unten ein anderes element.
body.getElementsByClassName('foo')
erhalten die Elemente, die classname 'foo', die aber enthalten sind, innerhalb des Körpers.document.getElementsByClassName('foo')
bekommen alle Elemente mit Klassennamen 'foo' in das gesamte Dokument, einschließlich der<head>
.InformationsquelleAutor jsoverson
typeof document
undtypeof document.body
sind die gleichen, weil Sie beideobject
. Typen nicht so, wie Sie denken, die Sie in JS mit Bezug auf Objekte. Also Nein, Sie sind nicht die gleichen, und es gibt keinen besonderen Grund hätte Sie zu support auf die gleiche Funktion eingestellt. (Auch Objekte mit dem gleichen prototype nicht um die gleiche Funktion eingestellt, aber das ist eine andere Sache.) Rufen Sie einfachgetElementById
aufdocument
und es wird funktionieren.("Doktor, Doktor, es tut weh wenn ich meinen arm über meinen Kopf und drehen Sie es sehr schnell durch eine Figur-8-Muster!" "Ja? So knock it off.")
InformationsquelleAutor chaos
Ihre
typeof
Beispiel ist nicht zu vergleichen, Sie sind die gleiche Sache, aber, dass Sie die gleiche "Art", für die sich beide zurückobject
:Ausgabe aus Firebug-Konsole:
Weitere details auf
typeof
finden Sie unter:https://developer.mozilla.org/en/JavaScript/Reference/Operators/typeof
InformationsquelleAutor JonWarnerNet