代码不循环遍历整个json数据

时间:2017-07-29 15:59:11

标签: jquery json

$(function () {
var data;
$.getJSON("menu.json", function(data){
    //console.log(data);
    //console.log(data.menu);
    //console.log(data.menu.length);

    //console.log(data.menu[1].link);

    //getMenuItem(data);


    var $menu = $("#menu");
    console.log($menu);
    console.log(this);
    console.log(data)
    $.each(data.menu, function () {
        $menu.append(getMenuItem(data));
        //console.log(this);
    });
//     //$menu.menu();

    //getMenuItem(data); 

});


    function getMenuItem(data) {


        var i = 0;

        while(i<data.menu.length){

            var item = $("<li>").append($("<a>", 
                {
                    href: '#' + data.menu[i].link,
                    html: data.menu[i].name
                }));

            //console.log(data.menu[i]);


            if (data.sub) {
                var subList = $("<ul>");
                $.each(data.sub, function () {
                    subList.append(getMenuItem(this));
    //                 //console.log(this);
    //                 //console.log(subList);
                });
                item.append(subList);
    //             //console.log
            }
            i+=1;
            console.log(i);
            return item;

        }
    }


        /*optional stuff to do after success */

// console.log(data);
// console.log(jsonD);
// for(i=0;i<data.menu.length;i++){
//     console.log(data.menu[i].sub);
// }

});

这是我的js(jquery)文件。我试图从位于本地的json文件中获取数据。这是一个多级列表。当我运行代码时,它不会获取整个json数据,而只获取列表中的第一个项目。有人可以帮忙吗?

这里也是我的json文件

{
"menu" : [{
    "name": "Croatia",
    "link": "0",
    "sub": null
}, {
    "name": "England",
    "link": "1",
    "sub": [{
        "name": "Arsenal",
        "link": "0-0",
        "sub": null
    }, {
        "name": "Liverpool",
        "link": "0-1",
        "sub": null
    }, {
        "name": "Manchester United",
        "link": "0-2",
        "sub": null
    }]
}, {
    "name": "Spain",
    "link": "2",
    "sub": [{
        "name": "Barcelona",
        "link": "2-0",
        "sub": null
    }, {
        "name": "Real Madrid",
        "link": "2-1",
        "sub": null
    }]
}, {
    "name": "Germany",
    "link": "3",
    "sub": [{
        "name": "Bayern Munich",
        "link": "3-1",
        "sub": null
    }, {
        "name": "Borrusia Dortmund",
        "link": "3-2",
        "sub": null
    }]
}]
}

P.S #menu是ul,请在jquery中回答

1 个答案:

答案 0 :(得分:2)

在第一个each内,不要将data数组传递给getMenuItem(),只需传入对象实例,方法与递归调用getMenuItem(this) <的方式相同/ p>

然后删除while()循环

 // loop over array
 $.each(data.menu, function(i, item) {
   // get menu item for each object instance
   $menu.append(getMenuItem(this));
 });

 function getMenuItem(obj) {
   var item = $("<li>").append($("<a>", {
     href: '#' + obj.link,
     html: obj.name
   }));

   if (obj.sub) {
     var subList = $("<ul>");
     $.each(obj.sub, function() {
       subList.append(getMenuItem(this));
     });
     item.append(subList);

   }
   return item;
 }

DEMO