Saturday, May 23, 2009

[jQuery] live()が激しく便利な件について

最近jQueryを使って動的なページを作っており、頻繁にappend()やremove()を使ってページエレメントを追加・削除している。その時に面倒だったのが新たに追加したエレメントへのイベントのバインドだ。つまり、append()で追加したエレメントにイベントを毎度バインドするということをやっていた。

しかし、何かうまい方法があると思ってもう一度jQueryのドキュメントを見てみると、live()というチョー便利な関数が(version 1.3から追加されたみたいだ)。以下に簡単なサンプルを。

// class=messageをクリックすると自分自身が消えるようにする
$('.message').live('click', function() {
$(this).remove();
});

// id=addというボタンを押すと、class=messageというdivをページに追加
$('#add').click(function() {
$('body').append('
hello
');
});

これまでは、要素が追加されるたびにbind()を使っていたのが、live()のおかげで楽チンになった。やっぱりjQueryはすばらしい。

Monday, May 04, 2009

[JavaScript] document.write("<scr" + "ipt>")って?

最近色々なJavaScriptのソースを読む機会があったのだが、その中で妙な記述があるのを見つけた。


<script type="text/javascript">
...
document.write("<script type=\"text/javascript\" src=\"foo.js\">" + "</scr" + "ipt>");
...
</script>


これは、JavaScript中で別のファイルを読み込む時に使う。最初は、なんだこりゃ?と思ったが、よく考えてみると、もしdocument.writeの"</scr" + "ipt>"が"</script>"だったとすると、これが最初の<script>タグの対だと認識されてしまうからだというのが分かった。

しかし、こういったバッドノウハウで回避しないといけないような作りになっているこのスクリプトの方が問題だと思うのだが...