_<textarea>
_のjQueryのアイテムの.val()
プロパティは、新しい行では機能しないようです。テキスト領域はEnterキーを認識してプレビューとして表示するため、この機能が必要です。新しい行はそのままです。
しかし、何が起こるかはこのフィドルに示されています: http://jsfiddle.net/GbjTy/1/ 。テキストは表示されますが、新しい行には表示されません。
スタックオーバーフローの質問後のプレビューでこれを行うため、新しい行を含めるプレビューをどのように実現できますか。
ありがとう。
PS私はSOこれに関連する他のリンクを見ましたが、それらはすべてエンドユーザーにコードを使用させるように言っています。これは私にとって理想的な方法ではありません。 SO質問のプレビュー)のような特定のコードを記述しているエンドユーザーが、Enterがプレビューで機能するように機能します。
これはCSSの問題であり、JavaScriptの問題ではありません。 HTMLはデフォルトで空白を折りたたみます-これには改行の無視が含まれます。
追加 - white-space: pre-wrap
を出力divに追加します。 http://jsfiddle.net/mattball/5wdzH/
これはすべての最新のブラウザーでサポートされています: https://caniuse.com/#feat=css3-tabsize
Textareasの強制改行は\n
sです。textarea以外のHTMLタグはこれらを無視します。これらの要素に改行を強制するには、<br />
を使用する必要があります。
すでにJavaScriptに依存しているため、CSSではなくJavaScriptを使用して修正することをお勧めします。
$( "#watched_textarea" ).keyup( function() {
$( "#output_div" ).html( $( this ).val().replace(/\n/g, '<br />') );
});
ここで更新されたバージョンを見つけることができます: http://jsfiddle.net/GbjTy/2/
このようなものを試してください:
$( "#watched_textarea" ).keyup( function() {
$( "#output_div" ).html( $( this ).val().replace('\n', '<br/>') );
});
HTMLでは、空白はデフォルトで無視されます。
<div>
タグに<pre>
鬼ごっこ:
<pre id="output_div"></pre>
そしてそれはうまくいくでしょう。
$( "#watched_textarea" ).keyup( function() {
$( "#output_div" ).html( $( this ).val().replace(/[\r\n]/g, "<br />") );
});
HTML出力の場合、改行文字を<br>
タグに置き換える必要があります。
これはデモです: http://jsfiddle.net/GbjTy/3/
改行は完全に出力されますが、HTMLは改行を無視します。<br>
が必要です。
次のような単純なnewline-to-br関数を使用します。
function nl2br_js(myString) {
var regX = /\n/gi ;
s = new String(myString);
s = s.replace(regX, "<br /> \n");
return s;
}
$( "#watched_textarea" ).keyup( function() {
$( "#output_div" ).html( nl2br_js($( this ).val()) );
});
ここにjsfiddle: http://jsfiddle.net/r5KPe/
ここからのコード: http://bytes.com/topic/javascript/answers/150396-replace-all-newlines-br-tags
その場合
textareaの.val()を別のページに表示しない(たとえば、フォームをサーブレットに送信して別のJSPに転送する)。
javaScript/JQuery内でURLエンコーディングの一部としてtextareaの.val()を使用する(たとえば、本文をtextareaの内容としてmailto:を使用)
次に、textareaの説明を次のようにURLEncodeする必要があります。
var mailText = $('#mailbody').val().replace(/(\r\n|\n|\r)/gm, '%0D%0A');
簡単な解決策があります:preタグでコンテナを作成します。
<textarea id="watched_textarea" rows="10" cols="45">test </textarea>
<pre class="default prettyprint prettyprinted"><code ><span class="pln" id="output_div">fdfdf</span></code></pre>
<script>
$("#watched_textarea").keyup(function() {
$("#output_div").html($(this).val());
});
</script>
Jqueryを使用するより便利な方法を見つけました。
サンプルコード
[〜#〜] html [〜#〜]
<textarea></textarea>
<div></div>
<button>Encode</button>
[〜#〜] js [〜#〜]
$('button').click(function() {
var encoded = $('<label>').text($('textarea').val()).html();//the label element can be replaced by any element like div, span or else
$('div').html(encoded.replace(/\n/g,'<br/>'))
});
laravelブレードテンプレートでjqueryを使用してtextarea値を設定しようとしましたが、変数に新しい行が含まれているため、コードが壊れていました。
私のコードスニペットは
$("#textarea_id").val("{{ $php_variable }}");
以下のようにコードスニペットを変更して問題を解決しました。
$("#textarea_id").val("{{ str_replace(array('\r', '\n', '\n\n'), '\n', $php_variable }}");
あなたがこの問題に直面しているなら、これから利益を得るかもしれません。
<?php
//$rsquery[0] is array result from my database query
//$rsquery[0] = 1.1st Procedure \n2.2nd Procedure
//txtRisks is a textarea
//sample1
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
return $string;
}
//sample2
function nl2br2($string) {
$string = str_replace(array("\r\n", "\r", "\n"), "\\n", $string);
return $string;
}
echo "$('#txtRisks').val('".nl2br2($rsquery[0])."')";
?>