jQuery如何确定循环中的递归级别

时间:2011-12-22 21:28:13

标签: javascript jquery recursion

我有以下代码:

    $(document).ready(function() {
        var ul = $("<div>");
        ul.addClass("menu").appendTo('.menuwrapper');
    });
    function loop(obj, ul) {
        $.each(obj, function(key, val) {
            if($.isPlainObject(val)) { // object, call recursively

                //if depth = 1 then { } else { }
                var ul2 = $("<ul>").addClass('hide').appendTo(
                    $("<div>").append(key).appendTo(ul)
                );


                loop(val, ul2);
            } else {
                $("<li>", {
                    class: 'innerli'
                }).text(val).appendTo(ul);
            }
        });
    }

    $.getJSON('test.json', function(data) {
        var ul = $(".menu");
        loop(data, ul);
    });

test.json示例:

{"Dashboard":{"Submenu1":"Submenu1","Submenu2":"Submenu2"},"About us":"About us","Services":{"Service1":"Service1","Service2":"Service2"}}

我想在循环中添加一个条件,说明如果这是对象的x级别,那么就做'某事'(我在代码中添加了一条注释到我正在讨论的部分)。 / p>

3 个答案:

答案 0 :(得分:3)

 function loop(obj, ul,depth) {
    $.each(obj, function(key, val) {
        if($.isPlainObject(val)) { // object, call recursively

            //if depth = 1 then { } else { }
            var ul2 = $("<ul>").addClass('hide').appendTo(
                $("<div>").append(key).appendTo(ul)
            );


            loop(val, ul2,(depth+1));
        } else {
            $("<li>", {
                class: 'innerli'
            }).text(val).appendTo(ul);
        }
    });
}


 $.getJSON('test.json', function(data) {
    var ul = $(".menu");
    loop(data, ul, 0);
});

这应该告诉你每个递归级别的深度。

答案 1 :(得分:2)

通过计数器和递增计数器每个级别,如:

 function loop(obj, ul,loopCount) {
    loopCount++;
    $.each(obj, function(key, val) {
        if($.isPlainObject(val)) { // object, call recursively

            //if depth = 1 then { } else { }
            var ul2 = $("<ul>").addClass('hide').appendTo(
                $("<div>").append(key).appendTo(ul)
            );


            loop(val, ul2,loopCount);
        } else {
            $("<li>", {
                class: 'innerli'
            }).text(val).appendTo(ul);
        }
    });
}

答案 2 :(得分:1)

function loop(obj, ul, depth) {
    depth = depth || 1;   // first level
    ...
    loop(val, ul2, depth + 1);
}

第一个新行中的||运算符允许您第一次调用该函数而不指定初始深度值 - 它将默认为1。