コンテンツ内の改行タグ(BRタグ)をtextarea内の改行コードに置き換える方法
presented by 役に立つかもしれないBlog
ブラウザごとに動作が異なる、通常タグとtextareaやpreなどの、文字列をそのまま表示するタグの間での改行の扱いと、タグのエスケープについてです。
Ajaxによる非同期通信で画面の編集が楽になった昨今、通常タグをクリックひとつで入力フォームに変える技も利用する場は多いのではないかと思います。
今回は、ライブラリとして一般的なprototype.jsを各所に使わせてもらいます。
/*
nowElemはどこの要素でもいいです。
ここでは仮に、内部に改行<br>要素を含む<p>要素の参照としましょう。
*/
var nowElem = $("myContents");
var parentElem = nowElem.parrentNode;
var val = nowElem.innerHTML;
val = val.replace(/<br>|<BR>/g, "\r\n");
var va = val.split("\r\n");
va.each(function(str,i){va[i]=str.unescapeHTML();});
val = va.join("\r\n");
//新しくtextarea要素を生成
var newElem = document.createElement("textarea");
newElem.value = val;
//要素の入れ替え
parrentElem.replaceChild(newElem, nowElem);
要するに、最近のモダンブラウザでは共通の挙動をする\r\nの改行コードに置き換えます。
また、prototype.jsのunescapeHTML()を複数行の文字列に対して行なうと、改行コードが削除されてしまいますので、いったん改行コードを基準に配列分解し、1行づつunescapeHTML()を実行して、最後にそれをぜんぶくっつけます。 めんどくさいですね。。
このページに関連のある記事はこちら
- SeleniumでjQueryを利用する
- JavaScriptでDATETIME型の日付を得る方法
- JavaScriptで全角数字を半角数字に変換する方法(おまけつき)
- tableにjQueryのtoggleを使うと幅が100%に広がらない件
- JavaScript+Prototype.jsで右クリックメニューが作れる「Proto.Menu」
- jQueryでbit.lyと連携。短縮URLをTwitterに投稿してもらう方法
- JavaScriptで日付から「第○曜日」(何番目の曜日か)を調べる方法
- PhoneGapとAppleデベロッパーライセンスの同意事項について
- clickイベントが効かない人への処方箋(iPhone&jQuery)
- HTML5サイトを作らずにはいられない。「HTML5&API入門」
- リンクをクリックさせる前にJavaScript:confirmで確認する時の注意


