任何更好的方法(假设我有10个a
元素)?
$('#id > a:nth-child(1)').click(function() { changeP(1); return false; });
$('#id > a:nth-child(2)').click(function() { changeP(2); return false; });
$('#id > a:nth-child(3)').click(function() { changeP(3); return false; });
我知道两种可能性,但我并不特别喜欢它们:
.bind()
代替.click()
.map(return $(this))
然后使用索引var 答案 0 :(得分:3)
你可以这样做:
$('#id > a').each(function(i) {
$(this).click(function() { changeP(i); return false; });
});
jQuery会将所选元素的索引作为第一个参数传递给“each”函数。
答案 1 :(得分:2)
您可以使用index
方法获取元素的索引(相对于它的父元素):
$("#id > a").click(function() {
changeP($(this).index() + 1);
return false;
});
您需要添加1,因为元素索引从0开始,而nth-child
从1开始。这是因为jQuery方法倾向于应用于匹配集中的所有元素,因此click
事件处理程序绑定到与选择器匹配的所有元素。
答案 2 :(得分:0)
$('#id > a').click(function(){
changeP($(this).index(' #id > a')+1);
return false;
});
请参阅:index()
即使在代码中插入了其他元素,这仍然有效:
<div id="id">
<a href="#">1</a>
<span>hello</span>
<a href="#">2</a>
<a href="#">3</a>
<a href="#">4</a>
</div>
答案 3 :(得分:0)
$.each( $('#id > a'), function(index) {
$(this).click(function() {
changeP(index); return false; });
});
答案 4 :(得分:0)
您正在寻找.each():http://api.jquery.com/each/
$('#id > a').each(function(index){
$(this).click(function(){
changeP(index+1);
});
});