Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss
Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

<br> wird aus erstellter Tabelle entfernt

3 views
Skip to first unread message

Jan Novak

unread,
Oct 27, 2022, 12:56:14 PM10/27/22
to
Hallo,

es ist mir nicht möglich, einen Text, bestehend aus "text<br>weiteres"
zu einer erstellten Tabelle hinzu zu fügen. Die <br> werden niht
ausgewertet. Mein Code (Ausschnitt):

out= "html text mit <br> inside";

var tableBody = document.createElement('TBODY');
var tr = document.createElement('TR');
tableBody.appendChild(tr);
var td = document.createElement('td');
// var p = document.createElement('p');
// p.innerHTML=out;
td.innerHTML=out;
//td.appendChild(p);
tr.appendChild(td);

Ich habs mit p's, div's oder span's, innerText, innerHTML oder auch
createTextNode innerhalb des TD's versucht, welche ich dem td element
hinzufüge. Brachte alles keinen Erfolg.

Jan

Jan Novak

unread,
Oct 28, 2022, 1:34:50 AM10/28/22
to
Am 27.10.22 um 19:14 schrieb Stefan Ram:
> Jan Novak <rep...@gmail.com> writes:
>> Ich habs mit p's, div's oder span's, innerText, innerHTML oder auch
>> createTextNode innerhalb des TD's versucht, welche ich dem td element
>> hinzufüge. Brachte alles keinen Erfolg.
>
> Wenn Du nur einen Ausschnitt aus Deinem Programm zeigst,
> wird für den Leser nicht klar, ob dann nach dem Ausschnitt
> noch so etwas wie
>
> tableBody.appendChild( tr );
> document.body.appendChild( tableBody );
>
> kommt. Jedenfalls führt das Programm
>
> <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"
> lang="de" xml:lang="de">
> <head><meta charset="UTF-8" /><title>Programm 20221027180750</title>
> </head><body><script type="text/javascript">
> let tableBody = document.createElement( 'tbody' );
> let tr = document.createElement( 'tr' );
> let td = document.createElement( 'td' );
> tableBody.appendChild( tr );
> td.innerHTML = "html text mit <br> inside 20221027180835+0100";
> tr.appendChild( td );
> tableBody.appendChild( tr );
> document.body.appendChild( tableBody );
> console.log( document.body.outerHTML );
> </script></body></html>
>
> hier bei einem Browser aus dem Jahre 2021 zu der folgenden
> Ausgabe auf der Konsole des Browsers:

Bei mir wird das <br> als "<br>" angezeigt und und nicht als
Zeilenumbruch. Das hatte ich vergessen zu schreiben. Sorry.


Jan

Peter J. Holzer

unread,
Oct 28, 2022, 6:06:13 AM10/28/22
to
On 2022-10-28 05:34, Jan Novak <rep...@gmail.com> wrote:
> Am 27.10.22 um 19:14 schrieb Stefan Ram:
>> Jan Novak <rep...@gmail.com> writes:
>>> Ich habs mit p's, div's oder span's, innerText, innerHTML oder auch
>>> createTextNode innerhalb des TD's versucht, welche ich dem td element
>>> hinzufüge. Brachte alles keinen Erfolg.
>>
>> Wenn Du nur einen Ausschnitt aus Deinem Programm zeigst,
>> wird für den Leser nicht klar, ob dann nach dem Ausschnitt
>> noch so etwas wie
>>
>> tableBody.appendChild( tr );
>> document.body.appendChild( tableBody );
>>
>> kommt. Jedenfalls führt das Programm
>>
>> <!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"
>> lang="de" xml:lang="de">
[...]
>> td.innerHTML = "html text mit <br> inside 20221027180835+0100";
[...]
>> </script></body></html>
>>
>> hier bei einem Browser aus dem Jahre 2021 zu der folgenden
>> Ausgabe auf der Konsole des Browsers:

Relevanter wäre wahrscheinlich die Ausgabe im Browser-Fenster:

------------------------------------------------------------------------
html text mit
inside 20221027180835+0100
------------------------------------------------------------------------

> Bei mir wird das <br> als "<br>" angezeigt und und nicht als
> Zeilenumbruch. Das hatte ich vergessen zu schreiben. Sorry.

Bei Stefans Testprogramm auch oder nur bei Deinem?

Im ersten Fall ist Dein Browser kaputt. Im zweiten Fall steckt der
Fehler vermutlich in dem Teil, den Du uns nicht gezeigt hast. Z.B. hast
Du uns nicht gezeigt, was überhaupt in der Variable "out" steht.

Hint: Immer ein kleines vollständiges Beispiel posten, das den Fehler
demonstriert. Dann kann man das reproduzieren. Wenn man fehlende Teile
ergänzen muss, dann ist die Wahrscheinlichkeit groß, dass man sie so
ergänzt, dass es funktioniert (wie Stefan das hier gemacht hat).

hp

Jan Novak

unread,
Oct 28, 2022, 7:55:25 AM10/28/22
to
Am 28.10.22 um 12:06 schrieb Peter J. Holzer:
> Im ersten Fall ist Dein Browser kaputt. Im zweiten Fall steckt der
> Fehler vermutlich in dem Teil, den Du uns nicht gezeigt hast. Z.B. hast
> Du uns nicht gezeigt, was überhaupt in der Variable "out" steht.

Doch .... siehe 1. Post: out= "html text mit <br> inside";


Und ja... es lag an dem sch..... browser. Alsi das gleiche mit dem
firefox gemacht habe, gings. Auch nach dem löschens aller Caches usw.
keine Verbesserung. Nur ein löschen des Profils und neuanlage half.
Somit: Mein Fehler und js war korrekt.


Danke @all.

jan

Peter J. Holzer

unread,
Oct 28, 2022, 3:13:50 PM10/28/22
to
On 2022-10-28 11:55, Jan Novak <rep...@gmail.com> wrote:
> Am 28.10.22 um 12:06 schrieb Peter J. Holzer:
>> Im ersten Fall ist Dein Browser kaputt. Im zweiten Fall steckt der
>> Fehler vermutlich in dem Teil, den Du uns nicht gezeigt hast. Z.B. hast
>> Du uns nicht gezeigt, was überhaupt in der Variable "out" steht.
>
> Doch .... siehe 1. Post: out= "html text mit <br> inside";

Stimmt, sorry. Habe ich offenbar übersehen, weil es anders als der Rest
des Codes nicht eingerückt war.

hp

Thomas 'PointedEars' Lahn

unread,
Oct 30, 2022, 8:07:46 PM10/30/22
to
Jan Novak wrote:

> es ist mir nicht möglich, einen Text, bestehend aus "text<br>weiteres"
> zu einer erstellten Tabelle hinzu zu fügen. Die <br> werden niht
> ausgewertet. Mein Code (Ausschnitt):
>
> out= "html text mit <br> inside";

Dort sollte mindestens

var out = "html text mit <br> inside";

stehen.

> var tableBody = document.createElement('TBODY');
> var tr = document.createElement('TR');
> tableBody.appendChild(tr);
> var td = document.createElement('td');
> // var p = document.createElement('p');
> // p.innerHTML=out;
> td.innerHTML=out;
> //td.appendChild(p);
> tr.appendChild(td);
>
> Ich habs mit p's, div's oder span's, innerText, innerHTML oder auch
> createTextNode innerhalb des TD's versucht, welche ich dem td element
> hinzufüge. Brachte alles keinen Erfolg.

Aus dem obigen Quelltext geht hervor: Du hast zwar das td-Element dem TR-
Element hinzugefügt, aber das TR-Element nicht dem TBODY-Element, und das
TBODY-Element nicht einem table-Element. (Ansonsten ist das bis dahin fast¹
die richtige Vorgehensweise, denn sie vermeidet mehrfaches Rendering.)

Einfacher formuliert: Du hast anscheinend vergessen, Deinen Unterbaum in den
Dokumentbaum „einzuhängen“.

Daher befindet sich Dein td-Element nicht im Dokumentbaum, sondern nur ein
td-Elementobjekt im Heap.

Wenn ich nach Ausführen Deines (originalen) Codes in der Chromium-Konsole
ein table-Elementobjekt im Dokument mit “table” referenziere und

table.appendChild(tableBody);

aufrufe, dann funktioniert das bei mir (in einem beliebigen HTML5-Dokument –
für den Test habe ich einen Wikipedia-Artikel benutzt) einwandfrei, d. h. es
erscheint der Text mit dem Zeilenumbruch im Dokument (auch wenn das Markup
so nicht empfohlen wird).

Falls das nicht die Ursache ist, dann liegt es möglicherweise daran, dass
Du syntaktisch fehlerhaftes Markup, oder Quelltext, der an dieser Stelle zu
syntaktisch fehlerhaftem Markup führen würde, einzufügen versuchst.

In XHTML sind “TBODY”- und “TR”-Elemente ungültig; es muss dort “tbody” und
“tr” heissen. Ausserdem ist “<br>” ungültig (weil nicht geschlossen); es
muss dort “<br/>” heissen.

In HTML, insbesondere HTML5, ist es nicht nötig (aber erlaubt), bei der
Erzeugung des Elementobjekts den Elementtyp mit Grossbuchstaben zu
schreiben. Konsistenz in der Schreibung ist empfehlenswert.

Die innerHTML-Eigenschaft wird IIRC von einigen Layout-Engines im XHTML-
Modus unterstützt, von anderen nicht. Daher ist auch mit dieser Eigenschaft
ein XHTML-Problem möglich.

Ausserdem ist bekannt, dass die Verwendung der innerHTML-Eigenschaft in
Zusammenhang mit Tabellen zu Problemen führen kann.

Ohne Angabe der Laufzeitumgebung (z. B.: welcher Browser, welche Browser-
Version?) lässt sich nichts Genaueres dazu sagen.

__________
¹ Logisch wäre es in diesem Fall, das tr-Elementobjekt zuletzt zu
erstellen. Der von Dir gewählte Weg ist nur dann sinnvoller, wenn
Du auch testest, ob das Objekt erstellt werden konnte, bevor Du es
benutzt. Diese Tests fe len aber bei Dir.
--
PointedEars
<https://github.com/PointedEars> | <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2
Please do not cc me. /Bitte keine Kopien per E-Mail.
0 new messages