jQuery嵌套.each()

3
$(".globalTabs").each(function(){
    var $globalTabs = $(this);
    var parent = $globalTabs.parent('form');

    //initiate jQuery UI tabs
    $globalTabs.tabs();

    var ATBwidth = $globalTabs.parent().outerWidth();
    var tabsWidth = 0;

    //get total width of all li/tabs
    $(".globalTabs .ui-tabs-nav li").each(function() {
     tabsWidth += $(this).outerWidth();
    });


    if(tabsWidth >= ATBwidth){
       //doing something here
    }


});

由于嵌套的.each,出现了问题 - 是否有简单的方法解决这个问题?

出现了问题 = 第二个循环后,也就是涉及到$globalTabs的功能不再触发,因为它未定义。

愚蠢的错误:

在第二个循环之后的这一部分中,我两次引用了选择器。

所以,使用$(".globalTabs").each(function(){当然是行不通的:$globalTabs.find(".globalTabs .ui-tabs-nav li").hide();

与循环无关。

感谢大家的帮助。


5
你的意思是,“is breaking”是什么意思? - Linuxios
2个回答

5

不要使用 this 的值,而是传递从 .each(index, value) 中获取的值。

$(".globalTabs").each(function(index, value){
    var $globalTabs = $(value);
    var parent = $globalTabs.parent('form');

    //initiate jQuery UI tabs
    $globalTabs.tabs();

    var ATBwidth = $globalTabs.parent().outerWidth();
    var tabsWidth = 0;

    //get total width of all li/tabs
    $(".globalTabs .ui-tabs-nav li").each(function(index, secondValue) {
     tabsWidth += $(secondValue).outerWidth();
    });


    if(tabsWidth >= ATBwidth){
       //doing something here
    }


});

如果为每一组回调参数赋予相同的名称,则不会帮助澄清任何内容。 :-) - Blazemonger
需要 tabsWidth += $(secondValue).outerWidth(); - Jason
@Jason 更改为:$(secondValue) - dmck
第二个循环后仍然出现故障。 - Jason
@Jason,请问您能否编辑一下您的问题,明确“breaks”的含义吗?目前不是很清楚。 - dmck
第二个循环后涉及到 $globalTabs 的功能未被触发 - $globalTabs 未定义。 - Jason

0

也许你的多个this变量混淆了?尝试在回调函数中使用参数代替(http://api.jquery.com/each/):

$(".globalTabs").each(function(i,tab){
    var $globalTabs = $(tab);

// ...

$(".globalTabs .ui-tabs-nav li").each(function(j,myli) {
    tabsWidth += $(myli).outerWidth();
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接