Zeichenfolge, die mit der ID eines Elements identisch ist, gibt das Element zurück [duplicate]
Lesezeit: 3 Minuten
Abhishek Kumar
Ich bin auf eine Situation gestoßen, die funktioniert, aber ich verstehe nicht, warum. Wenn ich ein Element nenne id="abc" und TU console.log(abc) ohne es zuerst einzustellen, gibt es mir das HTML-Objekt. Kann sich jemand dieses Verhalten erklären?
Beispiel
<h1 Id="abc" >abcdefghj</h1>
<script>
// without using document.getElementById
console.log(abc); // Returns h1 element
</script>
Ich weiß nicht, warum es mir das ganze Element gibt, ohne document.getElementById() zu verwenden.
id -Attribut wird im globalen Bereich definiert. Aus diesem Grund wird die übermäßige Verwendung von IDs nicht als bewährte Methode angesehen
– Marmelade
10. Februar 2020 um 8:37 Uhr
Ich denke, die folgende Frage kann nützlich sein. Werden DOM-Baumelemente mit IDs zu globalen Variablen?
– AbdurrahmanY
10. Februar 2020 um 8:44 Uhr
abc ist nicht ein Faden. "abc" ist. abc ist ein Bezeichner und wird zuerst im lokalen Bereich, dann im globalen und dann im Fensterobjekt nachgeschlagen.
– Polygnom
10. Februar 2020 um 18:52 Uhr
Frottee
Dies ist eine Legacy-Funktion der DOM-API: Grundsätzlich ist alles mit einer ID über seinen Schlüssel im Fensterobjekt zugänglich, dh window[id].
In Ihrem Fall, abc Ist im Wesentlichen window.abcwas ein Verweis auf das Element mit der ID von ist abc (d.h. übereinstimmend mit der #abc Wähler).
Dies ist auch ein Grund, warum IDs in einem HTML-Dokument eindeutig sein müssen und dass das Verhalten des Browsers, doppelte IDs zu handhaben, technisch nicht durch die Spezifikation definiert ist.
In einem ähnlichen Zusammenhang ist es aufgrund dieser Funktion gefährlich, Ihren Element-IDs zu geben, die native Funktionen/Prototypen außer Kraft setzen können. Hier ist ein Beispiel: <button id="submit"> wenn sie sich in einem Formular befinden. Wenn Sie versuchen, das Formular programmgesteuert mit zu senden formElement.submit()Sie laufen tatsächlich auf einen Fehler, weil jetzt die formElement.submit bezieht sich tatsächlich auf das verschachtelte Schaltflächenelement mit der ID von submit statt der nativen Methode. Hier kannst du es selbst ausprobieren:
<form id="myForm">
<input type="text" />
<button id="submit">
Submit form
</button>
<button id="btn" type="button">
Click me to programmatically submit form
</button>
</form>
Schön, ich kannte dieses Legacy-Feature nicht, wir lernen jeden Tag dazu!
–Pierre
10. Februar 2020 um 8:35 Uhr
Hinweis: IIRC war früher unzuverlässig, aber in HTML5 ist es jetzt Standard.
– Benutzer253751
10. Februar 2020 um 17:31 Uhr
Vielleicht möchten Sie Ihrer Antwort einen weiteren Leckerbissen hinzufügen: abc ist nicht, wie vom OP behauptet, eine Zeichenfolge (das wäre "abc"), aber es ist ein Bezeichner und wird als solcher wie ein Name behandelt, und die Namenssuche findet statt.
– Polygnom
10. Februar 2020 um 18:54 Uhr
@ user253751 Aus Gründen der Legacy-Kompatibilität standardisiert zu sein, verhindert nicht, dass es veraltet ist.
– Bergi
11. Februar 2020 um 0:12 Uhr
14415700cookie-checkZeichenfolge, die mit der ID eines Elements identisch ist, gibt das Element zurück [duplicate]yes
id
-Attribut wird im globalen Bereich definiert. Aus diesem Grund wird die übermäßige Verwendung von IDs nicht als bewährte Methode angesehen– Marmelade
10. Februar 2020 um 8:37 Uhr
Ich denke, die folgende Frage kann nützlich sein. Werden DOM-Baumelemente mit IDs zu globalen Variablen?
– AbdurrahmanY
10. Februar 2020 um 8:44 Uhr
abc
ist nicht ein Faden."abc"
ist.abc
ist ein Bezeichner und wird zuerst im lokalen Bereich, dann im globalen und dann im Fensterobjekt nachgeschlagen.– Polygnom
10. Februar 2020 um 18:52 Uhr