4
$('.hogehoge .hugahuga .piyopiyo div').on('click',function(){
  index = $('.hogehoge .hugahuga .piyopiyo div').index(this)
});

のように、長ったらしいセレクタを2度記述するのを回避する方法は

target = $('.hogehoge .hugahuga .piyopiyo div')
target.on('click',function(){
  index = target.index(this)
});

のように変数を定義するしかないですか?

$('.hogehoge .hugahuga .piyopiyo div').on('click',function(e){
  index = $(e.xxx).index(this)
});

のようにコールバック関数の内部から呼び出すことは不可能ですか?

hojo
  • 1,175
  • 3
  • 15
  • 27

1 Answers1

1

はじめに、$(this) を使う方法を思いつきました。しかしこれはクリックした要素しか返ってこないため、意図した挙動をしませんでした。

<div class="hogehoge">
  <div class="hugahuga">
    <div class="piyopiyo">
      <div>first</div>
      <div>second</div>
      <div>third</div>
    </div>
  </div>
</div>

上記のような .hogehoge .hugahuga .piyopiyo div で引っかかる要素が同じ親要素のもとにあるならば

$('.hogehoge .hugahuga .piyopiyo div').on('click',function(e){
    index = $(this).parent().find(this).index()
});

で動作することを確認しましたが、どうでしょうか。

itochan
  • 745
  • 1
  • 9
  • 23
  • @mrgrotesque 意図した挙動をするであろうコードを追加し編集しました – itochan Jan 03 '15 at 09:09
  • もう少しスマートな方法があれば…とも思うのですが、こちらの方法よりスマートな記法が自分では思いつきませんでした。ご丁寧な対応ありがとうございます。 – hojo Jan 03 '15 at 09:28