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%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%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).
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.
Es sollte oben ein \n\r
sein:
document.write("<textarea cols='10' rows='10'>" + "\n\rhello\nbabe\n" + "</textarea>");
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 ""
lautetEin 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.
Tags und Links javascript html textarea newline