3

所有,我已经尽我所能来解决这个问题,尽管我发现的可能的例子要复杂得多,而且似乎我是唯一一个遇到这个问题的人,所以我来找你帮助,或者只是一个解释。

在下面的代码中,我希望连续看到三个警报,tab-1、tab-2 和 tab-3,但我看到的是 tab-1 的三个警报。为什么会这样?获得预期效果的解决方案可能是什么?

感谢您的时间和帮助。

的HTML

<div id="tab-1">
    <span class="test"></span>
</div>
<div id="tab-2">
    <span class="test"></span>
</div>
<div id="tab-3">
    <span class="test"></span>
</div>

jQuery

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

4

3 回答 3

3

您对每种语法都有点偏离。

$(".test").each(function(index, element) {
    alert($(element).parent().attr("id"));
});

这使用您正在进行的迭代,而不是再次查询每个测试类并使用第一个。

于 2012-09-25T16:42:16.657 回答
3

因为您正在查询$('.test')而不是使用.each()循环中的项目,所以将其更改为此

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

见这里:http: //jsfiddle.net/gLh5z/

您也可以使用function(idx, elem)and$(elem)而不是$(this)作为函数将索引和元素作为前两个参数传递。

于 2012-09-25T16:42:18.243 回答
3

虽然您的代码很接近,但它并不完全正确。你应该使用:

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

更新了 JS Fiddle 演示

您遇到的问题是您在每次迭代时重新选择数组each(),而 jQuery 将简单地返回返回的数组的第一个元素的属性。

参考:

于 2012-09-25T16:42:31.397 回答