I’m by no means a jQuery (or JavaScript) expert so forgive me if I’m misunderstanding or overlooking something. I have the following HTML:
<html>
<body>
<div class="ted">Ted</div>
<div class="ted">Ted</div>
<div class="tim">Tim</div>
<div class="ted">Ted</div>
<div class="tim">Tim</div>
</body>
</html>
And the following JS:
$('.ted').click(function() {
alert($(this).index());
});
When I click a div with the class '.ted' the alert should show the index of that div.
Clicking the first div alerts ‘0’ (expected), the second div alerts ‘1’ (expected). However, clicking the last '.ted' div (the fourth in the list) alerts ‘3’ – why is this not giving an index of 2? (as JS arrays are 0 based) and this is the third '.ted' div?
It’s as if $('.ted') is actually bringing back all the divs in the list?
Example here: http://jsfiddle.net/nha2f/6/
The
.index()method docs make this behaviour clear. Here’s the relevant part (emphasis added):Since the third element that matches your selector is actually the fourth child of its parent, it has an index of 3.
Continue reading through the documentation to find the solution to your problem:
So, you can pass the same selector to
.index()and it will return the index of the element relative to the matched set: