无法访问嵌套的循环元素

时间:2013-08-20 17:25:39

标签: javascript jquery

我正在尝试访问嵌套循环中的元素。 我使用$(this)访问第一个循环的循环元素就好了,但是使用$(this)无法访问secnod元素。 如何访问第二个元素?

$('.buttons').each(function(){
    width = 100 / $(this).length;
    $(this).each(function () {
        $(this).width = width + '%';
    });
});

上面的代码设置了第一个循环的第一个循环元素,而不是内部循环元素。

4 个答案:

答案 0 :(得分:3)

根据您的评论,您尝试使用按钮访问每个班级中的子div。

$('.buttons').each(function(){
    var children = $(this).find('div'), width = 100 / children.length;
    children.each(function () {
        $(this).width(width + '%');
    });
});

答案 1 :(得分:1)

假设您的标记看起来像这样:

<div class="buttons">
    <div class="button"></div>
    <div class="button"></div>
    <div class="button"></div>
    <div class="button"></div>
</div>

我相信这就是你要找的东西,它会均匀地设置每个按钮的宽度,使它们加起来达到100%;

$('.buttons').each(function(){
    var $buttons = $(this).find('.button');
    var width = 100 / $buttons.length;
    $buttons.width(width+'%');
});

<强> Demo fiddle

答案 2 :(得分:0)

“this”始终是每个循环上下文中的迭代器。因此,要引用外环的迭代器,必须将其引用赋值给变量。

$('.buttons').each(function(){
    var jqOuterThis = $(this);
    var outerWidth = 100 / $(this).length;
    $(jqOuterThis).each(function () {
        $(jqOuterThis).width(outerWidth + '%');
    });
});

答案 3 :(得分:0)

另一种方法是利用“每个”的参数。

$('.buttons').each(function(i, element) { ... });

这样你就可以在任何进一步的嵌套中使用$(元素)(除非在以后的使用中用相同的参数名覆盖)。

“i”是迭代器变量。如果它在第3个找到的元素上,我将是2,第4个将是3,等等。