DOM Baum in JavaScript document.body.childNodes[1]

BodyLAB

Bekanntes Mitglied
Hallo zusammen,

ich muss mich gerade in JavaScript einarbeiten und scheitere schon an den einfachen Sachen :-(

Hier mal ein Beispiel:
Code:
<!DOCTYPE html>
<html lang="de">

<head>
    <meta charset="UTF-8">
    <title>Baum Test</title>

    <script src="baum.js"></script>

</head>

<body>
    <h1>Hallo DOM</h1>
    <p>Ein <strong><em>kurzes</em></strong> Beispiel</p>
</body>
</html>

Nun möchte ich mir nur im document.body das <h1> und <p> Element ausgeben lassen.
Wenn ich es so mache geht es:
Java:
"use strict";

window.onload = () => {
    
    console.log(document.body.firstChild.tagName);
    console.log(document.body.lastChild.tagName);
    console.log(document.body.childNodes[1].tagName);
    console.log(document.body.childNodes[3].tagName);
}

Wieso childNodes[1] ? Fängt doch normal bei 0 an zu zählen :-( versteht das jemand? Hab es mit FireFox und Chrom getestet und geht beides nur mit 1 und 3, + 2 für jedes weiter Element. Bei 0, 2, etc. kommt undefined.

Dann habe ich mich auch noch etwas gefragt und zwar wie bekomme ich denn den body ohne document.body also so in der Art:
document.firstChild.nextSibling.childNodes[2]

Auch hier muss ich childNodes[2] machen? Des weiteren wieso horizontal durchlaufen? mit nextSibling bekommt man doch die Knoten auf der Horizontale. document.firstChild sollte doch HTML sein oder?
Oh das ist <!DOCTYPE html> nicht <html>. So kommt man auf <html>
document.firstChild.nextSibling

Dann verstehe ich gerade aber nichts mehr. Dachte das ganze wäre eine Baumstruktur, kann es sein das die ersten Elemente alle Horizontal angeordnet sind?
 

mihe7

Top Contributor
Ja, das ist ein Baum, in dem das Document den Wurzelknoten darstellt. Allerdings ist es ein Baum von Knoten (Node) und nicht jeder Node ist auch ein Element. So gibt es z. B. Textnodes (kein Element), in Deinem Fall der Leerraum zwischen z. B. dem body- und dem h1-Tag. Wenn Du die Leerzeichen entfernst, also <body><h1>Hallo Dom!</h1> schreibst, dann sollte der erste Kindknoten von body auch h1 sein.
 
M

Mart

Gast
Java:
<!DOCTYPE html>



<body>
<h1>Hallo DOM</h1>
<p>Ein <strong><em>kurzes</em></strong> Beispiel</p>
</body>
<head>
<meta charset="UTF-8">
    <title>Baum Test</title>
<html lang="de">
</head>
<script>

    window.onload = () => {
        for( let ins of document.body.childNodes)
        {
        console.log(ins);
        }
    }
</script>
</html>
ich schmeiss es dir einfach mal so hin ... ich gedenke nicht dass du und javascript euch einig seit was "document.body" bedeutet :D


und ja ... document.body != <body></body>



seit html 5 gibt es mehrere möglichkeiten für das umschließende tag

<!DOCTYPE HTML>
<HTML>
<html>

sind alles richtige sachen



informiere dich mal über selektoren eg
querySelector
getElementBy....

da wirst du schon was finden das deine Fragen lüftet
 
Zuletzt bearbeitet von einem Moderator:
M

Mart

Gast
in Deinem Fall der Leerraum zwischen z. B. dem body- und dem h1-Tag. Wenn Du die Leerzeichen entfernst, also <body><h1>Hallo Dom!</h1> schreibst, dann sollte der erste Kindknoten von body auch h1 sein.
nicht ganz... da document.body nicht dem node <body> entspricht ... es entspricht dem was man im browser sieht
hätte er den body node raus geholt wäre auch eine sinnvolle node liste raus gekommen
hier kommt aber eine Node liste raus die ansich unnützlich ist wegen den line breaks und leeren strings
 

mihe7

Top Contributor
nicht ganz... da document.body nicht dem node <body> entspricht ... es entspricht dem was man im browser sieht
hätte er den body node raus geholt wäre auch eine sinnvolle node liste raus gekommen
hier kommt aber eine Node liste raus die ansich unnützlich ist wegen den line breaks und leeren strings
Ich weiß nicht, was Du mir sagen willst. Jeder Node, der kein Blatt ist, enthält andere Nodes (childNodes), wie das in einem Baum halt so üblich ist. Es gibt verschiedene Typen von Nodes, für das Dokument, Elemente, Attribute, Text usw.

HTML wird geparst, wobei ein Baum entsteht. Dieser Baum muss nicht 1:1 mit dem HTML-Code übereinstimmen. Beispielsweise muss man keinen html-Tag angeben, im Baum wird man dennoch ein html-Element vorfinden.

Der Wurzelknoten eines HTML-Dokuments wird per document referenziert und enthält insbesondere das html-Element. Dieses enthält wiederum das body-Element. Der Browser stellt letztlich den Baum dar, dadurch wirkt sich eine Manipulation am Baum auch auf die Darstellung aus.

Das body-Element enthält neben Elementen eben auch andere Nodes anderer Typen, z. B. für Text. Allerdings wird nicht jedes Whitespace auch in einen Textnode übersetzt - in der Spezifikation zum DOM findet sich dazu die nette Aussage: "Note that, due to the magic that is HTML parsing, not all ASCII whitespace were turned into Text nodes, but the general concept is clear. Markup goes in, a tree of nodes comes out." (https://dom.spec.whatwg.org/#introduction-to-the-dom)

Umgekehrt finden sich Textnodes, wo man keine erwarten würde. Beispielsweise wird aus
HTML:
<body><div>X</div></body>
ein Baum, der am Ende einen Textknoten mit einem Newline-Zeichen enthält:
Code:
document
|
+-- html
    |
    +-- body
        |
        +-- div
        |   |
        |   +-- #text ("X")
        +-- #text ("\n")
Der erste Kindknoten von body ist hier das div.

Bei
HTML:
<body>
  <div>X</div>
</body>
ist der erste Kindknoten dagegen ein Textknoten mit einem Text der Länge 3 (ein Newline gefolgt von zwei Leerzeichen).
 

BodyLAB

Bekanntes Mitglied
Okay danke für eure Antworten.
Jetzt habe ich das wenigstens etwas besser verstanden :)

Kann mir vielleicht jemand noch kurz erklären wieso man nextSibling Das nächste Kind des Elternknotens benötigt?
Geht das nicht auch mit dem Array childNodes?
 

BodyLAB

Bekanntes Mitglied
Hab noch eine Frage an euch.
Wie kann ich nun den ganzen Baum rekursiv durchlaufen?

Hier wäre mein Versuch:
Java:
<html>

<head>
    <title>DOM-Demo</title>
    <script>
        window.onload = () => {
           
        function recursiveRun(node) {
                if (node.type == 1)
                    console.log(node.tagName);
                else {
                    for (let i = 0; i < node.childNodes.length; i++)
                        recursiveRun(node.childNodes[i]);
                }
           }
            let rootNode = document.body;
            recursiveRun(rootNode);
    </script>
</head>

<body id="alles">
    <h3 id="Ueberschrift">DomBaum</h3><img src="ball.gif" id="Ball1" /><img src="ball.gif" id="Ball2" /><img
        src="ball.gif" id="Ball3" /><img src="ball.gif" id="Ball4" />
    <div>
        <ul>
            <li></li>
        </ul>
    </div>
</body>

</html>

Ausgegeben wird nichts. Wenn ich die Ausgabe in die for Schleife schreibe gibt er mir fast alles aus bis auf das LI Element :-( Wenn ich doch das UL Element habe und lande dann in der Schleife sollte mir dort doch das childNodes Array eine länge von größer 0 haben.
Wieso wird das LI Element verschluckt und oben kommt keine Ausgabe?
 

BodyLAB

Bekanntes Mitglied
Okay oben hab ich einen Fehler gemacht bei node.type das muss natürlich node.nodeType heißen.
Wieso merkert JS nicht echt hässlich!

So hier ein neuer Versuch doch jetzt geht er natürlich nicht in die Rekursion =D
Java:
function recursiveRun(node) {
                if (node.nodeType != 1 ){
                    for (let i = 0; i < node.childNodes.length; i++) {
                        recursiveRun(node.childNodes[i]);
                    }
                }
                else
                    console.log(node.tagName);
            }



So geht es nun aber nicht schön!
Java:
            function recursiveRun(node) {
                if (node.nodeType == null) {
                   return;
                }
                else {
                    if (node.nodeType == 1)
                        console.log(node.nodeName);

                    for (let i = 0; i < node.childNodes.length; i++) {
                        recursiveRun(node.childNodes[i]);
                    }
                }

            }
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
M fetch - API - Probleme? JavaScript Angular, React, JQuery - Fragen zu JavaScript 3
M JavaScript - Fetch Probleme Angular, React, JQuery - Fragen zu JavaScript 0
M Fetch Probleme - JavaScript? Angular, React, JQuery - Fragen zu JavaScript 1
M JavaScript Hilfe dringend (v.2) Angular, React, JQuery - Fragen zu JavaScript 1
P Cypress Test mit javascript ergibt [object Undefined] Meldung Angular, React, JQuery - Fragen zu JavaScript 0
F Javascript Problem bei mehrere ID's Angular, React, JQuery - Fragen zu JavaScript 7
B JavaScript - Array mit Objekten anhand des Object-keys sortieren Angular, React, JQuery - Fragen zu JavaScript 2
I JavaScript: Array umgekehrt von vorn auffüllen Angular, React, JQuery - Fragen zu JavaScript 7
B Kommunikation zwischen Javascript und Java? Angular, React, JQuery - Fragen zu JavaScript 7
A Problem bei Sortierung von Rechnungsnummern mit JavaScript Angular, React, JQuery - Fragen zu JavaScript 1
B Besseres Arbeitsmanagement bei Javascript Programm? Angular, React, JQuery - Fragen zu JavaScript 19
I Fehler im JavaScript? Angular, React, JQuery - Fragen zu JavaScript 2
B Rich Text Editor With Javascript Angular, React, JQuery - Fragen zu JavaScript 1
B nodeJS JavaScript Object require Angular, React, JQuery - Fragen zu JavaScript 12
Aartiyadav Annotation in Javascript and Typescript Angular, React, JQuery - Fragen zu JavaScript 2
B Javascript Tutorial für DOM Manipulationen? Angular, React, JQuery - Fragen zu JavaScript 0
Q Mit JavaScript Daten aus einer Textdatei verarbeiten Angular, React, JQuery - Fragen zu JavaScript 2
H RegExp in Javascript String Angular, React, JQuery - Fragen zu JavaScript 1
B php Datei in JavaScript öffnen Angular, React, JQuery - Fragen zu JavaScript 9
M Einkaufswagen JavaScript Angular, React, JQuery - Fragen zu JavaScript 4
Zeppi Javascript JSON in ein Array Angular, React, JQuery - Fragen zu JavaScript 1
Cellsplitter Api auslesen und in Json Datei speichen - Javascript (node js) Angular, React, JQuery - Fragen zu JavaScript 10
Noahscript [Frage]: Wie erstelle ich eine htmlspecialchars_decode mit JavaScript? Angular, React, JQuery - Fragen zu JavaScript 1
A Javascript validateInput Angular, React, JQuery - Fragen zu JavaScript 0
Zeppi Javascript URL als Link Angular, React, JQuery - Fragen zu JavaScript 2
T Javascript x-Axis fortlaufendes Datum eintragen Angular, React, JQuery - Fragen zu JavaScript 0
P Editor- mit javascript Sonderzeichen beim schreiben vorschlagen Angular, React, JQuery - Fragen zu JavaScript 0
Jose Merchan JavaScript and SEO Angular, React, JQuery - Fragen zu JavaScript 0
B JavaScript Button hinzufügen Angular, React, JQuery - Fragen zu JavaScript 2
A Ich habe eine frage zu JavaScript adblock detector? Wenn jemand auf OK Klick soll die Sete neu geladen werden Angular, React, JQuery - Fragen zu JavaScript 1
d.lumpi in javascript input erstellen Angular, React, JQuery - Fragen zu JavaScript 4
Martob282 Belegnummerierungsstempel mit JavaScript erstellen Angular, React, JQuery - Fragen zu JavaScript 34
N Javascript: mehrere Textfelder prüfen ob es sich um eine Zahl handelt und diese zwischen 1 und 49 liegt Angular, React, JQuery - Fragen zu JavaScript 10
S Javascript Canvas RadialGradient -> SVG Gradient Angular, React, JQuery - Fragen zu JavaScript 0
C JavaScript in Siri-Shortcuts zur Webseiten Bedienung Angular, React, JQuery - Fragen zu JavaScript 8
N TypeScript zu JavaScript Angular, React, JQuery - Fragen zu JavaScript 1
M Taste mit Javascript simulieren Angular, React, JQuery - Fragen zu JavaScript 6
B Rauch per Javascript auf Bild packen? Angular, React, JQuery - Fragen zu JavaScript 4
X Ohm Rechner in JavaScript aber was bedeutet Power? Angular, React, JQuery - Fragen zu JavaScript 103
ruutaiokwu JavaScript in Angular 8-Anwendung verwenden Angular, React, JQuery - Fragen zu JavaScript 11
T Ich möchte einen Button mit JavaScript ausblenden Angular, React, JQuery - Fragen zu JavaScript 5
J Html Button mit JavaScript ausführen Angular, React, JQuery - Fragen zu JavaScript 5
L [JavaScript] Mehrere Variablen für Live-Suche in MySql-DB Angular, React, JQuery - Fragen zu JavaScript 0
D Java Tool um HTML und Javascript zu analysieren Angular, React, JQuery - Fragen zu JavaScript 3
P Hashes in JavaScript Angular, React, JQuery - Fragen zu JavaScript 7
P Zahlen in JavaScript Angular, React, JQuery - Fragen zu JavaScript 3
M Spalte verlinken mit JavaScript Angular, React, JQuery - Fragen zu JavaScript 9
P Angular vor JavaScript lernen? Angular, React, JQuery - Fragen zu JavaScript 1
S Unterstützung in Javascript Angular, React, JQuery - Fragen zu JavaScript 2
W Javascript + couchDB Angular, React, JQuery - Fragen zu JavaScript 2
T Grafische und tabellarische Datendarstellung mit JavaScript Angular, React, JQuery - Fragen zu JavaScript 2
E Javascript wenn Variable aktualisiert wird, dann prüfe Angular, React, JQuery - Fragen zu JavaScript 0
D Javascript um eine Seite in einem PDF Formular ein-/Ausblenden zu lassen Angular, React, JQuery - Fragen zu JavaScript 3
ARadauer JavaScript und replace... Angular, React, JQuery - Fragen zu JavaScript 1
P Richtiges Auslesen von mehreren Daten im JSON Format via JavaScript Angular, React, JQuery - Fragen zu JavaScript 2
n00b4u JavaScript Daten lokal Speichern Angular, React, JQuery - Fragen zu JavaScript 7
C per Javascript auf S4 nach Sensordaten fragen? Angular, React, JQuery - Fragen zu JavaScript 2
B Fehler im JavaScript Angular, React, JQuery - Fragen zu JavaScript 3
C In Wordpress unter Custom-Js mit Javascript den ursprünglichen Code deaktivieren Angular, React, JQuery - Fragen zu JavaScript 0
K Javascript "Bild mit Pfeiltasten automatisch bewegen" HILFE Angular, React, JQuery - Fragen zu JavaScript 0
M Javascript Höhe Angular, React, JQuery - Fragen zu JavaScript 2
N Problem - Google Analytics Tracking Javascript Datei von eigenen Server laden Angular, React, JQuery - Fragen zu JavaScript 1
C Javascript Image.getRGB(x,y) Angular, React, JQuery - Fragen zu JavaScript 1
K Proxy PAC File Javascript Angular, React, JQuery - Fragen zu JavaScript 2
F Von JavaScript "Spaghetticode" zu Backbone.js Angular, React, JQuery - Fragen zu JavaScript 0
H Javascript für wordpress "open new window" Angular, React, JQuery - Fragen zu JavaScript 1
F JavaScript replace funktion Angular, React, JQuery - Fragen zu JavaScript 1
T JavaScript Variable in Klasse ändern Angular, React, JQuery - Fragen zu JavaScript 2
N JavaScript für Touch Devices bei DropDown Menü Angular, React, JQuery - Fragen zu JavaScript 4
T Javascript - Polygon, wieviel % sind gefüllt Angular, React, JQuery - Fragen zu JavaScript 1
K JavaScript Banner Syntax Error Angular, React, JQuery - Fragen zu JavaScript 4
D JavaScript jTable Angular, React, JQuery - Fragen zu JavaScript 2
Fab1 [SUCHE] JavaScript Buch für Umsteiger Angular, React, JQuery - Fragen zu JavaScript 4
T html code per javascript einfügen Angular, React, JQuery - Fragen zu JavaScript 7
nrg RegExp Split \r\n in Javascript Angular, React, JQuery - Fragen zu JavaScript 5
J JavaScript und "import"? Angular, React, JQuery - Fragen zu JavaScript 10
B [Javascript] bytearray to file Angular, React, JQuery - Fragen zu JavaScript 2
L Javascript Maus Funktion Angular, React, JQuery - Fragen zu JavaScript 4
K JavaScript Kontaktformulare Angular, React, JQuery - Fragen zu JavaScript 2
B Javascript popup Angular, React, JQuery - Fragen zu JavaScript 5
D Sontag ? JavaScript fehler ? Angular, React, JQuery - Fragen zu JavaScript 12
L JavaScript for-Schleife Angular, React, JQuery - Fragen zu JavaScript 5
D Nachladen von JavaScript Angular, React, JQuery - Fragen zu JavaScript 7
F JSON Datei in JavaScript einbinden Angular, React, JQuery - Fragen zu JavaScript 1
F Node.js und JavaScript Angular, React, JQuery - Fragen zu JavaScript 3
Chris81T Java <> DWR <> JavaScript/HTML Angular, React, JQuery - Fragen zu JavaScript 2
F Hilfe Button mit Javascript Angular, React, JQuery - Fragen zu JavaScript 2
F Dropdownmenü für JavaScript Angular, React, JQuery - Fragen zu JavaScript 5
F [S] Hilfe beim JavaScript auf Homepage Angular, React, JQuery - Fragen zu JavaScript 4
M JavaScript Objekt .play .reload? Angular, React, JQuery - Fragen zu JavaScript 10
N warum kann ich kein javascript und css in mein html script einbinden Angular, React, JQuery - Fragen zu JavaScript 3
Gossi Frage zu Html (evtl. auch JavaScript?) Angular, React, JQuery - Fragen zu JavaScript 10
L JavaScript Array Angular, React, JQuery - Fragen zu JavaScript 4
C JavaScript: Adresszeile aulesen wenn, dann Angular, React, JQuery - Fragen zu JavaScript 6
C Daten von Java an Javascript übergeben möglich? Angular, React, JQuery - Fragen zu JavaScript 5
K JavaScript tooltip-Frage Angular, React, JQuery - Fragen zu JavaScript 8
P Javascript auf Website aufrufen Angular, React, JQuery - Fragen zu JavaScript 5
P Javascript geht nur offline im safari - online läuft es nicht!? Angular, React, JQuery - Fragen zu JavaScript 3
H JavaScript-Umsetzung Angular, React, JQuery - Fragen zu JavaScript 3
M Hyperlink in JavaScript Angular, React, JQuery - Fragen zu JavaScript 4

Ähnliche Java Themen

Neue Themen


Oben