Zeichenfolge, die mit der ID eines Elements identisch ist, gibt das Element zurück [duplicate]

Lesezeit: 3 Minuten

Benutzeravatar von Abhishek Kumar
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

Terrys Benutzeravatar
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:

const myForm = document.getElementById('myForm');

const helloButton = document.getElementById('btn');
helloButton.addEventListener('click', () => {
  myForm.submit();
})
<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

1441570cookie-checkZeichenfolge, die mit der ID eines Elements identisch ist, gibt das Element zurück [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy