2014-11-05 22 views
1

我想要做的是通过它在div中的位置来标识元素。我已经尝试了下面的代码,它的工作原理,但我很好奇,如果有更有效的方法来做到这一点。jQuery - 通过它在兄弟姐妹中的位置(索引)识别对象

HTML:

<div class="container"> 
    <button>One</button> 
    <button>Two</button> 
    <button>Three</button> 
</div> 

<div class="result"></div> 

的JavaScript:

$('.container button').on('click', function(e) { 
    clickedBtn = e.target; 
    btnNum = 0; 

    $('.container button').each(function(i) { 
    if ($(this)[0] === clickedBtn) 
     btnNum = i+1; 
    }); 

    $('.result').text('Clicked button #' + btnNum); 
}); 

回答

3

既然你正在寻找基于在兄弟姐妹的索引可以拨打.index()不带任何参数。

$('.container button').on('click', function(e) { 
 
    $('.result').text('Clicked button #' + $(this).index()); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div class="container"> 
 
    <button>One</button> 
 
    <button>Two</button> 
 
    <button>Three</button> 
 
</div> 
 

 
<div class="result"></div>

+0

啊,这么多的jQuery的功能来跟踪!这非常好,这正是我需要的。谢谢! – CaptSaltyJack 2014-11-05 07:35:03

+1

@CaptSaltyJack只是提到你的原始代码:'$(this)[0]'与'this'相同,'e.target'可以简单地'this',这是个好主意(在未来的情况下)在'btnNum = i + 1;'之后添加'return false;'以防止下一次不必要的'.each()'迭代。请记住'.index()'统计所有同胞([fiddle示例](http://jsfiddle.net/qvgkbdo3/)) - 它可能会导致将来不正确的行为。不要忘记标记答案是正确的。 – Regent 2014-11-05 07:42:28