六帖のかたすみ

DVを受けていた男性。家を脱出して二周目の人生を生きています。自閉症スペクトラム(受動型)です。http://rokujo.org/ に引っ越しました。

jQuery: イベントにnamespace!?

learn.jquery.com

 

jQueryはイベントにネームスペースを導入し、利便性の向上を図っています。

Namespacing Events

For complex applications and for plugins you share with others, it can be useful to namespace your events so you don't unintentionally disconnect events that you didn't or couldn't know about.

1
2
3
4
// Namespacing events
$( "p" ).on( "click.myNamespace", function() { /* ... */ } );
$( "p" ).off( "click.myNamespace" );
$( "p" ).off( ".myNamespace" ); // Unbind all events in the namespace

 

click.myNamespace

のようにピリオドに続けてネームスペースを記述することで、複数のイベントをグループ化したり、逆にあるイベントの一部分だけをon/offしたりできる、という仕組みです。

ふつうnamespaceといえばもっと上位のカテゴリを表すものですが、jQueryでは何故かnamespaceと呼んでいます。クラスみたいなものですけれど、クラスとは違うものなので名前を変えたのでしょうね。

$("p").off("click");

だとすべてのp要素のclickイベントが無効になってしまうので、

$("p").off("click.header");

のようにheaderのネームスペースをつけた要素だけ無効にしたい、なんてときに便利になるでしょう。

やはり設計思想の問題か

でもこれ、p要素にクラスを付けておいて

$("p.header").off("click");

でセレクトするんじゃだめなの!?という疑問が消えません。その方が構造がスタティックで、分かりやすい気がします。

一つ解釈が考えられます。クラスを付けるためにはHTMLで文章自体に要素を付加することを意味します。イベントはプログラム側の都合なんだから、画面表示と直接関係のないクラスをHTML/CSSに持ち込むんじゃねぇ!という思想が働いているのではないかと思いました。

ですので、プログラムの都合はプログラム内で完結してやるようにしましょう。