2012-04-15 51 views
0

我想从我的父母得到的div的IDjQuery的每个()只返回第一个找到的值

<div id="btn1"><label class="btn"><input type="submit" value="Submit"/></label></div> 
<div id="btn2"><label class="btn"><input type="button" value="Add"/></label></div> 

jQuery函数:

$('.btn').each(function() { 
    alert($('.btn').parent().attr("id")); 
}); 

的函数返回值“BTN1”两倍。它应该返回'btn1','btn2'。

在此先感谢。

回答

3

您在循环中再次使用.btn的选择器。改变它使用this

$('.btn').each(function() { 
    alert($(this).parent().attr("id")); 
}); 

编辑引用当前元素:

jfriend00

实在是没有理由用三个jQuery的函数调用这里。 只有当jQuery更好地完成工作时才应该使用jQuery。

而对于其中的一些常见的场景参考: https://stackoverflow.com/a/4652402/803739

+1

'$(本).parent()ATTR( “ID”)'可以用的东西取代了,更快,更紧凑'this.parentNode.id'。这里真的没有理由使用三个jQuery函数调用。 jQuery只能在更好地完成工作时使用。 – jfriend00 2012-04-15 15:52:01

+0

如果你想得到真正的技术,他的代码有很多错误,比如嵌套在'label'中的'input'等。我直接回答了他的问题。 – Terry 2012-04-15 15:56:49

+0

而且,我建议的代码可以做出更好的答案。你不需要防守。您可以将建议纳入您的答案。我想过发布一个相互竞争的答案,但决定试着让你改进你的答案。除此之外,当任何人(本例中的OP,然后由您复制)使用jQuery来执行某些操作时效率低下的地方时,这是我的宠儿。 – jfriend00 2012-04-15 16:02:22