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かはてブコメントにて。