例えば、ol 要素の中に li 要素が5つあったとして、li 要素のどれがクリックされたかをjQueryで拾いたいといった状況になったとします。
1つの方法としては、5つの li 要素すべてにid名を付けると言うやり方が考えられるかと思います。
ただイベント情報を拾うためだけにid名を付けるというのも中々面倒なやり方で、管理としても煩雑になる可能性があります。
そういった時に、id名を付けずに li 要素の何番目かを取得する方法です。
下記のようなhtmlがあったとします。
- <ol id="list">
- <li>1番目</li>
- <li>2番目</li>
- <li>3番目</li>
- <li>4番目</li>
- <li>5番目</li>
- </ol>
このhtmlで、どのli要素がクリックされたかをjQueryで取得したい場合、下記のような記述となります。
- $(function() {
- $('#list li').on('click', function() {
- alert( $('#list li').index(this) );
- });
- });
#list li の部分に拾いたい要素を指定します。例では ol id="list" の中のli要素のクリックイベントを拾いたいので、このような指定となります。
注意点としては「$(function(){});」を忘れて、head要素に記述するとうまくクリックイベントが拾えません。これはDOM要素作成のタイミングとjQueryの実行タイミングの問題で、html要素を取得する前にjQueryが実行され、指定の要素が無いという結果となりエラーとなります。
「$(function(){ });」で囲うようにする事で、DOM要素の読込み後に実行されるようになるので、head要素内でもエラーとならなくなります。
もう1つの注意点は、要素番号は0始まりとなりますので、例えば1番目をクリックした場合alertで返ってくる値は0となります。
これを1としたい場合は
- $('#olist li').index(this) + 1;
と実行結果に1を足すことで実現できます。