Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
テキストエリアに入力した文字をその場で確認できる「ライブコメントプレビュー」機能。けっこう前にEmotional Webでやってるの見て、(ここはjQuery使ってたんだけど)これくらいならライブラリ使わなくてもできそうだ、と思ってた ...で、書いてみた。
Sample
Script (2007.03.10)
window.onload = function() {
if(!document.getElementById) { return; }
target = document.getElementById("testForm");
var obj = '<h3>Live Comment Preview</h3><p id="pretext"></p>';
var flag = 0;
target.text.onfocus = function() {
if(flag == 0)
{
target.insertAdjacentHTML('beforeEnd', obj);
flag = 1;
}
target.text.onkeyup = function(){ preview(target) };
};
}
上記が起動および生成部分。実行タイミングはonkeyup。生成したタグの挿入にinsertAdjacentHTMLメソッドを使うことで、タグの記述を1行にまとめてあります(4行目)。ただしinsertAdjacentは普通に使うとFirefoxで無効なので、ちょっとしたトリックを使ってます。
function preview(target) {
var text = target.text.value;
text = text.replace(/\&/g,'&');
text = text.replace(/\</g,'<');
text = text.replace(/\>/g,'>');
text = text.replace(/\"/g,'"');
text = text.replace(/\'/g,''');
text = text.replace(/\n/g,'<br />\n');
document.getElementById('pretext').innerHTML = text;
};
上記が描写部分。前Ver.だとセキュリティ的に不安だという声があったので、HTMLタグのサニタイズ処理を加えてあります。これでよほどのエッジ・ケースでもなければ大丈夫。プレビュー部分自体にはシステムは絡まないし、ね。
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。