HTML-Textbereich ignoriert das erste neue Zeilenzeichen, warum?

8

Können Sie erklären, warum dies:

%Vor%

rendert ein Textfeld mit einer neuen Zeile am unteren Rand, aber KEINE neue Zeile oben ?

Geprüft IE8, FF11, Safari 5.1, Chrome 24

Und es ist kein JS-Problem, selbst wenn Sie HTML in die Seite schreiben, erhalten Sie das gleiche Ergebnis, d. h.

%Vor%

Die 1. neue Zeile fehlt noch !!!

Ich muss oben noch eine neue Zeile hinzufügen, um eine anzuzeigen:

%Vor%     
Marco Demaio 20.03.2013, 16:39
quelle

6 Antworten

3

Wenn Sie innerhalb von XHTML schreiben, verwenden Sie geeignete Entitäten.

%Vor%

Wenn ein Textknoten mit Leerzeichen (Leerzeichen, neue Zeile) beginnt, wird er von HTML-Parsern ignoriert. Das Codieren der neuen Zeile in eine richtige HTML-Entität zwingt den Parser, dies zu bestätigen.

%Vor%     
Louis Ricci 20.03.2013 16:49
quelle
3

Wenn möglich, ändern Sie Ihren Code so, dass der Textbereich als HTML vordefiniert ist, und schreiben Sie stattdessen den String wie folgt:

HTML:

%Vor%

Skript:

%Vor%

Das sollte Leerraum bewahren. Optional können Sie eine CSS-Regel hinzufügen:

%Vor%

Eine Geige zum Spielen:
Ссылка

Aktualisierung:

OP in IE8 getestet, was nicht funktioniert - es scheint eine Einschränkung / Bug mit diesem Browser zu sein. IE8 verwendet tatsächlich CR + LF, wenn Sie oben manuell einen Zeilenvorschub einfügen, aber wenn dies programmgesteuert eingestellt ist, wird dies vom Browser vollständig ignoriert.

Fügen Sie dies zum html hinzu, um einen Test durchzuführen:

%Vor%

Sie können sehen, dass die zurückgegebene Zeichenfolge lautet:

%Vor%

bedeutet, dass CR + LF vorhanden ist (die anderen Zeilenvorschübe werden in Leerzeichen konvertiert - aber das Einfügen eines Leerzeichens am Anfang hilft auch nicht). Ich denke, du kannst nichts gegen dieses Verhalten tun; Der Browser ist veraltet (aber leider immer noch weit verbreitet, so dass dies ein Problem für diese Benutzer sein kann, wenn dies erforderlich ist).

    
epistemex 20.03.2013 16:50
quelle
1

Fügen Sie vor dem ersten "\ n" ein Leerzeichen wie folgt hinzu:

%Vor%

oder

%Vor%

sonst wird es nicht funktionieren.

Aktualisierung: Später auf der Serverseite können Sie die ersten Leerzeichen entfernen, indem Sie

ausführen %Vor%

oder

%Vor%

wenn es PHP ist.

    
bogatyrjov 20.03.2013 16:47
quelle
1

Es sollte oben ein \n\r sein: document.write("<textarea cols='10' rows='10'>" + "\n\rhello\nbabe\n" + "</textarea>");

jsbin

    
Guilherme Nagatomo 29.05.2014 18:00
quelle
0

Endlich habe ich mit dieser serverseitigen Lösung fertig:

verdoppelt das führende (nur erste!) nl-Symbol, bevor es in textarea ausgegeben wird:

%Vor%     
Yuri Gor 25.02.2014 18:27
quelle
0

Beantworten der Frage "Warum". Dies wird in der HTML 5-Spezifikation in dem Kapitel angegeben, das beschreibt, wie die DOM-Struktur anhand von Tags in einem HTML-Dokument erstellt wird.

Im aktuellen HTML 5-Standard ist es "12.2 HTML-Dokumente analysieren" & gt; "12.2.6 Baumkonstruktion" & gt; "12.2.6.4 Die Regeln zum Parsen von Token in HTML-Inhalt" & gt; "12.2.6.4 .7 Der "In-Body" -Einfügemodus ".

(In HTML 5.2 ist der gleiche Abschnitt mit 8.2.5.4.7 ).

Scrollen Sie nach unten für den Eintrag "Ein Start-Tag, dessen Tag-Name" textarea ""

lautet
  

Ein Start-Tag, dessen Tag-Name "textarea" ist   Führen Sie diese Schritte aus:
  1. Fügen Sie ein HTML-Element für das Token ein.
  2. Wenn das nächste Token ein U + 000A LINE FEED (LF) -Zeichen-Token ist, dann ignoriere dieses Token und gehe zum nächsten Token. (Newlines am Anfang von Textarea-Elementen werden als Authoring-Komfort ignoriert.)
  3. Wechseln Sie den Tokenizer in den RCDATA-Status.
  ...

Der Algorithmus behandelt nur LF-Zeichen, da CR-Zeichen früher behandelt .

(Historisch gesehen, in veraltete HTML 4.01-Spezifikation suchen:
Sein Kapitel 17.7 "Das TEXTAREA-Element" hat ein Beispiel, das zeigt, dass der Textinhalt für ein Textfeld von einer neuen Zeile aus beginnt. Anhang B.3.1 Zeile Pausen (informativ) erklärt, dass solches Verhalten von SGML stammt.)

Ein Zeilenumbruchzeichen vor </textarea> end-Tag wird heutzutage in HTML 5 nicht mehr ignoriert.

    
Konstantin Kolinko 02.04.2018 02:24
quelle

Tags und Links