jQuery中的嵌套对象和$.each()

jQuery中的嵌套对象和$.each(),jquery,Jquery,我正在努力学习如何更好地构造代码,在学习了一些教程之后,我开始使用下面的模式 通过这种方式,我已经成功地构建了许多常见的UI小部件,尽管我遇到了第一道墙,下面的.each()循环似乎并没有在每个项目中循环,而是应用了所需的操作,就好像它在一次迭代中作用于所有项目一样 我读了一些关于$.each和objects的东西,虽然我不确定$.each,甚至不确定它是否是我应该去的方向 jQuery(document).ready(function($) { var tabs = { trig

我正在努力学习如何更好地构造代码,在学习了一些教程之后,我开始使用下面的模式

通过这种方式,我已经成功地构建了许多常见的UI小部件,尽管我遇到了第一道墙,下面的.each()循环似乎并没有在每个项目中循环,而是应用了所需的操作,就好像它在一次迭代中作用于所有项目一样

我读了一些关于$.each和objects的东西,虽然我不确定$.each,甚至不确定它是否是我应该去的方向

jQuery(document).ready(function($) {

var tabs = {

    trig : $('nav.tab-triggers'),
    content : $('section.tabs-content'),

    init : function() {
        tabs.address([tabs.trig]);
        tabs.address([tabs.content]);
    },

    address : function(item) {
        //for every instance of the item

        $(item).each(function() {
            var i = 1;
            $(this).addClass('tabs-' + i);

            // for ever child element in this instance of the item
            $(this).children().each(function() {
                var count = 1;
                if ( $(this).parent().is('nav') ) {
                    $(this).attr('href', '#tab-' + count);
               } else {
                    $(this).attr('id', 'tab-' + count);
               }

                count++;

            });

            i++;
        });
    },

    display : function () {
        //show hide stuff here.
    }


}

tabs.init();

});

所以经过多次尝试和错误,我终于让它工作了

基本上,据我所知,我试图迭代嵌套的objet,因此.each需要替换为$。每个方法的工作方式略有不同

    address : function(obj) {
        // for each obj
        $.each(obj, function(index,value) {
            //for each instance of the trigger / content item in the obj
             $.each(obj[index], function(index2,value2) {
                //add an incrementing class for each matched element
                $(value2).addClass('tabs-' + index2);
                // get the children of each matched element
                var kids = $(value2).children();
                // loop through each of the children
                $.each(kids, function(index3, value3) {
                    // if its parent is a nav element
                    if ( $(value3).parent().is('nav') ) {
                        // add href
                        $(value3).attr('href', '#tab-' + index3);
                    } else {
                        // add matching ids
                        $(value3).attr('id', 'tab-' + index3);
                    }


                });  // end loop through children elements
             }); // end loop through parent elements
        }); // iteration of passed obj
    }, // end address method

这是一种新的方法——有效。有更好的方法吗?

我注意到您正在使用自己的计数器,您可以使用$(item).each(函数(索引){});不理解你的其余问题嘿,谢谢你的输入,如果我能进一步解释的话,基本上所有的孩子都得到相同的href(在nav的情况下)或者ID,而不是递增的ID-就好像它在处理所有匹配的元素,而不是循环中的每个元素一样。因此,您得到的所有元素的ID或href都是相同的?今天早上再次查看后,似乎肯定要使用$。each,但我已经查看了文档,我不清楚应该如何实现它。我假设你有一些html来配合这个,你也可以发布吗?这有点难以理解。@MatthewGrima-当然-这里有一个链接,指向“结果”选项卡中的“检查源代码”以查看该方法添加的类/id/hrefs。