white-space
単純にhtml()
だけ使用する場合は</br>
などのHTMLタグが認識されるので、改行できると
思うのですが、上記の様なケースで改行をする方法がわかりません。
HTML
1<style>
2#hoge {
3 white-space: pre-line;
4}
5</style>
6</head>
7<body>
8<div id="hoge"></div>
9<script>
10'use strict';
11{
12 const text = 'こんにちは世界。こんばんは世界。';
13
14 jQuery('#hoge').text(text.replace(/。(?!$)/g, '$&\r\n'));
15}
16</script>
DocumentFragment
しかし、jQuery#text()
に拘る理由が質問文からは読み取れません。
DocumentFragment や jQuery オブジェクトを使用して、br要素ノードを含む疑似配列を jQuery#append()
しても良いと思います。
HTML
1<div id="hoge"></div>
2<script>
3'use strict';
4{
5 const text = 'こんにちは世界。こんばんは世界。',
6 LineList = text.match(/[^。]*。|[^。]+$/g),
7 df = document.createDocumentFragment(),
8 br = document.createElement('br');
9
10 df.appendChild(document.createTextNode(LineList[0]));
11
12 for (let i = 1, len = LineList.length; i < len; ++i) {
13 df.appendChild(br.cloneNode(false));
14 df.appendChild(document.createTextNode(LineList[i]));
15 }
16
17 jQuery('#hoge').append(df);
18}
19</script>
jQueryオブジェクト
HTML
1<div id="hoge"></div>
2<script>
3'use strict';
4{
5 let text = 'こんにちは世界。こんばんは世界。',
6 LineList = text.match(/[^。]*。|[^。]+$/g),
7 jQueryObject = jQuery(document.createTextNode(LineList[0])),
8 br = document.createElement('br');
9
10 for (let i = 1, len = LineList.length; i < len; ++i) {
11 jQueryObject = jQueryObject.add(br.cloneNode(false));
12 jQueryObject = jQueryObject.add(document.createTextNode(LineList[i]));
13 }
14
15 jQuery('#hoge').append(jQueryObject);
16}
17</script>
エスケープ
jQueryのエスケープ記法で改行したい
「エスケープ」というのは特殊な機能を持つメタ文字を無効化することです。
jQuery#text()
で挿入されるテキストノードには「メタ文字が存在しない」ので、そもそもエスケープ処理がありません。
Re: syoshinsya さん