質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

29322閲覧

JavaScript 文字列内での改行が反映されない

ryoo_chksl

総合スコア69

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2018/09/25 10:38

JavaScript

1var btn = document.getElementById("btn"); 2var result = document.getElementById("result"); 3 4btn.addEventListener('click', function() { 5 var payLess = 省略; 6 var short = 省略; 7 var payMore = 省略; 8 var over = 省略; 9 var str = `一人 ${payLess}円 だと ${short}円 足りません。一人 ${payMore}円 だと ${over}円 余ります。`; 10 result.textContent = str; 11 });

html

1<div id="btn">計算</div> 2<p id="result">ここに結果を表示します</p>

str変数に格納されている文字列の1文目と2文目の間で改行させたいです。しかし、普通に改行をしても「\n」をいれても、実行すると改行が反映されていません。その原因と対策を教えてください。

上に載せているコードは、この件に関係ありそうなコードを抜き出しているので、実際はもっと多くのコードがあります。また、payLess変数からover変数にも値が格納されているのですがここでは”省略”しています。上に載せた以外のコードが必要であれば載せます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

ちょっとこのHTMLをブラウザで開いて確認してみてください。
改行されて縦文字のように表示されるのではないかと考えがちですが、
1文字ずつの隙間に半角スペースが挟まるだけで改行されたとはみなされないはずです。

HTML

1<p id="result">こ 234567891011す</p>

HTMLをブラウザで表示する際、強制改行のタグ<br>を挟む必要があります。
この様に変更すれば全ての文字で改行され、縦書きの様に見えることでしょう。

HTML

1<p id="result">こ<br> 2こ<br> 3に<br> 4結<br> 5果<br> 6を<br> 7表<br> 8示<br> 9し<br> 10ま<br> 11す</p>

result.textContent = str;

この前提を元に上記のコードを見ていきます。
改行文字をそのまま挟むのではだめ。

result.innerHTML = strの方は文字列をHTMLとして解釈させながら注入するので、
改行の代わりに<br>タグを入れておけば意図通りの動作をしてくれることでしょう。

しかし、どんなタグも正常に動作すると言うことは、
scriptタグを埋め込めば任意のJavaScriptコードが実行可能です。
XSSが出来ることになるので、どうやってその対策を行うのかしっかり検討しましょう。

投稿2018/09/25 10:56

miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryoo_chksl

2018/09/25 11:08

では例えば、改行や\nを使った場合、str変数の値をコンソールに表示させたときは改行が反映されるということでしょうか?
miyabi-sun

2018/09/25 15:33

そうです。試してみて下さい。
guest

0

html

1<style> 2#result{white-space:pre;} 3</style> 4 5<p id="result">ここに 6結果を 7表示します</p>

投稿2018/09/26 00:39

yambejp

総合スコア114771

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

HTML としては、<pre> タグで囲まれているなどしない限り、改行コードは HTML 表示としての改行にはなりません。
HTML 表示としての改行は <br> タグが担当しますから、改行や \n の代わりに <br> を入れてみてください。

※ただし、text として入れてしまうと解釈されないので、 innerHTML として入れてやる必要があります

投稿2018/09/25 10:58

編集2018/09/25 10:59
tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryoo_chksl

2018/09/25 11:08

では例えば、改行や\nを使った場合、str変数の値をコンソールに表示させたときは改行が反映されるということでしょうか?
tacsheaven

2018/09/25 11:14

コンソールや、alert のメッセージの中であれば改行されます
guest

0

HTML上の改行は<br>です。

投稿2018/09/25 10:55

編集2018/09/25 10:57
dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryoo_chksl

2018/09/25 11:08

では例えば、改行や\nを使った場合、str変数の値をコンソールに表示させたときは改行が反映されるということでしょうか?
dice142

2018/09/25 11:15

コンソール出力であれば可能です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問