Das Lemma »NonElementParentNode#getElementById« (Das Lemma »NonElementParentNode#getElementById«), Lektion, Seite 723422
https://www.purl.org/stefan_ram/pub/getelementbyid_javascript (Permalink) ist die kanonische URI dieser Seite.
Stefan Ram
JavaScript-Kurs

»document.getElementById«

Die Verwendung von Elementkennungen als Namen (NAOTWO) ist in JavaScript  nicht immer zuverlässig möglich.

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

<script>Zustand = 1</script>

Es ist zur Zeit <span id="Zustand">(unbekannt)</span>.

<pre><code><script>/*<![CDATA[*/

Zustand.innerHTML='heiter'

/*]]>*/</script></code></pre></body></html>

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

Es ist zur Zeit <span id="Math">(unbekannt)</span>.

<pre><code><script>/*<![CDATA[*/

Math.innerHTML='heiter'

/*]]>*/</script></code></pre></body></html>

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

Es ist zur Zeit <span id="name">(unbekannt)</span>.

<pre><code><script>/*<![CDATA[*/

name.innerHTML='heiter'

/*]]>*/</script></code></pre></body></html>

Es ist viel sicherer, wenn »document.getElementById( 'a' )« an Stelle von »a« verwendet wird, um das Elementverzeichnis eines Elements mit der Kennung »a« auszudrücken.

Damit weiterhin ein kurzer Bezug auf solch ein Element möglich ist, kann in unserem Skript ein Name dafür definiert werden.

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

Es ist zur Zeit <span id="Math">(unbekannt)</span>.

<pre><code><script>/*<![CDATA[*/

zustand = document.getElementById( 'Math' )

zustand.innerHTML='heiter'

/*]]>*/</script></code></pre></body></html>

Dadurch werden die Skripte aber länger, so daß sie nicht mehr gut in Attributwerte passen. Auch dies spricht für eine stärkere Trennung von JavaScript  und HTML.

Verzeichnisstruktur

(this)

(window)
|
|
|
v
document -------> getElementById
alert ...
...

Das DOM 

Anders als NAOTWO gehört »getElementById« zum DOM -Standard, der festlegt, wie ein HTML-Dokument für Computerprogramme durch Verzeichnisse dargestellt wird.

Der DOM -Standard
https://dom.spec.whatwg.org/

Methoden

Im folgenden Programm versuchen wir, wie schon in früheren Lektionen, eine Abkürzung für eine Funktion zu definieren, nämlich den Namen »f« für die Funktion ≫document.getElementById≪.

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

Es ist zur Zeit <span id="Math">(unbekannt)</span>.

<pre><code><script>/*<![CDATA[*/

g = document.getElementById

zustand = g( 'Math' )

zustand.innerHTML='heiter'

/*]]>*/</script></code></pre></body></html>

Protokoll
TypeError: 'getElementById' called on an object that does not implement interface Document.

Diesmal erhalten wir jedoch eine schwer verständliche Fehlermeldung!

Warum?

Die Funktion ≫document.getElementById≪ ist eine Methode.

Das Verhalten einer Methode  kann von dem Verzeichnis  abhängen, das bei ihrem Aufruf angegeben wird.

Die Methode »getElementById« muß so aufgerufen werden, daß dabei »getElementById« hinter document.≪ steht.

Man sagt auch, sie müsse „auf dem Objekt “ ≫document≪ aufgerufen werden. – So erklärt sich die Fehlermeldung „TypeError:'getElementById' wurde auf einem Objekt aufgerufen, welches das Interface Document nicht implementiert.“.

Die Elementverzeichnisse enthalten häufig Methoden, für die wir also keine Abkürzungen definieren können, bei deren Nutzung das Verzeichnis, aus dem sie stammen, verloren geht. Möglich wäre eine Abkürzung für »document« wie im folgenden Beispiel.

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

Es ist zur Zeit <span id="Math">(unbekannt)</span>.

<pre><code><script>/*<![CDATA[*/

d = document

zustand = d.getElementById( 'Math' )

zustand.innerHTML='heiter'

/*]]>*/</script></code></pre></body></html>

Anzeige
Es ist zur Zeit heiter. 

Spezielle Einträge

In einem Webbrowser sind einige Attribute speziell, und Zuweisungen an sie haben nicht  die normale Wirkung. Dazu gehört beispielsweise der Eintrag »name« (»window.name«).

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

<script>Zustand = 1</script>

Es ist zur Zeit <span id="Zustand">(unbekannt)</span>.

<pre><code><script>/*<![CDATA[*/

name = document.getElementById( 'Zustand' )

a = document.getElementById( 'Zustand' )

/*]]>*/</script></code></pre></body></html>

Konsole von Firefox (2020)
a
<span id="Zustand">
name
"[object HTMLSpanElement]"

Hier ist es so, daß der Typ von »window.name« immer ›String‹ sein muß, und daher der Wert von »document.getElementById( 'Zustand' )« bei der Zuweisung an »name« (=»window.name«) automatisch in eine Zeichenfolge gewandelt wurde.

Um solche Probleme zu vermeiden, können vorübergehend Namen wie »a« verwendet werden, die nur aus einem einzigen Buchstaben  bestehen, da diese selten eine spezielle Bedeutung haben. Später werden wir eine bessere Lösung für solche Probleme kennenlernen.

Erleichterungen für Übungsaufgaben

Zur Erleichterung können Sie in folgenden Lektionen an Stelle von »getElementById« auch weiterhin NAOTWO  verwenden, wann immer dies möglich ist.

Übungsaufgaben

/   Übungsaufgabe

Überarbeiten Sie das folgende Programm so, daß es nicht mehr den per NAOTWO  automatisch definierten Namen »Anton« verwendet, sondern »document.getElementById«, um auf das Element mit der Kennung »Anton« zuzugreifen.

Main.html

<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" lang="de" xml:lang="de">
<head><meta charset="UTF-8" /><title>Main</title><style type="text/css">

.CSS { }

</style></head><body>

<span>
<span id="Anton">Anton</span>
<span id="Berta">Berta</span>
<span id="Dora">Dora</span>
</span>

<pre><code><script>/*<![CDATA[*/

Anton.innerHTML = 'Regina'

/*]]>*/</script></code></pre></body></html>

Seiteninformationen und Impressum   |   Mitteilungsformular  |   "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram.   |   Eine Verbindung zur Stefan-Ram-Startseite befindet sich oben auf dieser Seite hinter dem Text "Stefan Ram".)  |   Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram. Schlüsselwörter zu dieser Seite/relevant keywords describing this page: Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram723422 stefan_ram:723422 Das Lemma »NonElementParentNode#getElementById« Stefan Ram, Berlin, and, or, near, uni, online, slrprd, slrprdqxx, slrprddoc, slrprd723422, slrprddef723422, PbclevtugFgrsnaEnz Erklärung, Beschreibung, Info, Information, Hinweis,

Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten. Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/getelementbyid_javascript