jQueryでクリックされた要素が何番目かを取得する方法

2018/08/29

jQuery

t f B! P L

例えば、ol 要素の中に li 要素が5つあったとして、li 要素のどれがクリックされたかをjQueryで拾いたいといった状況になったとします。
1つの方法としては、5つの li 要素すべてにid名を付けると言うやり方が考えられるかと思います。

ただイベント情報を拾うためだけにid名を付けるというのも中々面倒なやり方で、管理としても煩雑になる可能性があります。
そういった時に、id名を付けずに li 要素の何番目かを取得する方法です。

下記のようなhtmlがあったとします。

  1. <ol id="list">
  2. <li>1番目</li>
  3. <li>2番目</li>
  4. <li>3番目</li>
  5. <li>4番目</li>
  6. <li>5番目</li>
  7. </ol>

このhtmlで、どのli要素がクリックされたかをjQueryで取得したい場合、下記のような記述となります。

  1. $(function() {
  2. $('#list li').on('click', function() {
  3. alert( $('#list li').index(this) );
  4. });
  5. });

#list li の部分に拾いたい要素を指定します。例では ol id="list" の中のli要素のクリックイベントを拾いたいので、このような指定となります。

注意点としては「$(function(){});」を忘れて、head要素に記述するとうまくクリックイベントが拾えません。これはDOM要素作成のタイミングとjQueryの実行タイミングの問題で、html要素を取得する前にjQueryが実行され、指定の要素が無いという結果となりエラーとなります。
「$(function(){ });」で囲うようにする事で、DOM要素の読込み後に実行されるようになるので、head要素内でもエラーとならなくなります。

もう1つの注意点は、要素番号は0始まりとなりますので、例えば1番目をクリックした場合alertで返ってくる値は0となります。
これを1としたい場合は

  1. $('#olist li').index(this) + 1;

と実行結果に1を足すことで実現できます。

このブログを検索

運営者

WEBにかかわる仕事に10年以上従事し、WEBディレクション、WEBデザイン、コーディング、JavaScript開発、広告運用,、サイト解析などを経験。

知識をアウトプットする事で自分のスキルがより磨かれることを期待すると共に、どなたかの役に立てればという想いで記事を書いています。