0

Is there anyway i can find the current class number?
For example: Total elements with class 'TEST' are 20. $('.TEST').length If i click on 4th test element i should get 4. I played with index but couldn't get it to work.
Please look the example below.

<div class="a">
    <div class="b">
        <div class="TEST">CLICK ON THIS.</div>
    </div>
</div>

<div class="e">
    <div class="f">
        <div class="TEST">CLICK ON THIS.</div>
    </div>
</div>

<div class="k">
    <div class="t">
        <div class="TEST">CLICK ON THIS.</div>
    </div>
</div>
.....

Jquery

$(document).on('click','.TEST'){
 .....
}
wordpress user
  • 548
  • 7
  • 24

2 Answers2

3

I think this is what you're looking for. Sounds like you were close.

$(function () {
  $('.TEST').click(function () {
    console.log($('.TEST').index(this));
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="a">
    <div class="b">
        <div class="TEST">CLICK ON THIS.</div>
    </div>
</div>

<div class="e">
    <div class="f">
        <div class="TEST">CLICK ON THIS.</div>
    </div>
</div>

<div class="k">
    <div class="t">
        <div class="TEST">CLICK ON THIS.</div>
    </div>
</div>
user94559
  • 59,196
  • 6
  • 103
  • 103
2

Note, click on fourth .TEST element should return 3, as .index() uses 0-based index

$(document).on('click', '.TEST', function(e) {
  console.log($(this).index(".TEST"))
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="a">
  <div class="b">
    <div class="TEST">CLICK ON THIS.</div>
  </div>
</div>

<div class="e">
  <div class="f">
    <div class="TEST">CLICK ON THIS.</div>
  </div>
</div>

<div class="k">
  <div class="t">
    <div class="TEST">CLICK ON THIS.</div>
  </div>
</div>
guest271314
  • 1
  • 15
  • 104
  • 177
  • Isn't that backwards? See my answer. – user94559 Jul 17 '16 at 19:21
  • This example will also account for elements added in the future which is quite great – Roko C. Buljan Jul 17 '16 at 19:40
  • P.S: http://stackoverflow.com/questions/12824549/should-all-jquery-events-be-bound-to-document – Roko C. Buljan Jul 17 '16 at 19:46
  • @RokoC.Buljan What do you suggest? `$(document)` could be substituted for `$(".TEST").parent().on("click", fn)`, though if `$("body").append("
    new TEST
    ")` the event would not be fired at click on `new TEST` where newest `.TEST` element parent would be `` element
    – guest271314 Jul 17 '16 at 19:51
  • No, `$(".TEST").parent().on("click", fn)` will not delegate events to future elements. Depends on the OP's HTML. `$("#someParent").on("click", ".TEST", callback)` would be best IMHO – Roko C. Buljan Jul 17 '16 at 19:53
  • @RokoC.Buljan Or, attach `click` event when element is appended to `document`, use named function instead of anonymous function, assign named function as handler when attaching click event. _"`$("#someParent").on("click", ".TEST", callback)` would be best IMHO"_ If element is appended directly to `body`, this would be `$("body").on("click", ".TEST", callback)`, yes? – guest271314 Jul 17 '16 at 19:55
  • 1
    @guest271314 Yes, I'd use that way if all my `.TEST` elements were created dynamically. `$("
    ",{class:"TEST",appendTo:"#parent",on:{click:function(){/*foo*/}}})`... (accounting for those other strange wrappers...)
    – Roko C. Buljan Jul 17 '16 at 19:59
  • @RokoC.Buljan Though if define named function, e.g., `function foo(){}` would be `on:{click:foo}})` instead of new anonymous function; same function reference for all `.TEST` elements – guest271314 Jul 17 '16 at 20:01
  • @guest271314 exactly. – Roko C. Buljan Jul 17 '16 at 22:12