jquery - 代码未循环遍历整个 json 数据

标签 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 回答

最佳答案

在第一个 each 中,不要将 data 数组传递给 getMenuItem(),只需按照与您相同的方式传递对象实例即可递归调用 getMenuItem(this)

然后删除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

关于jquery - 代码未循环遍历整个 json 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45391251/

相关文章:

javascript - HTML Canvas 未使用 Javascript 进行更新

javascript - 如何防止水平滚动条显示在我的 float div 上?

javascript - 区分按钮组

javascript - 添加新的 div 直到数到 9 或 6 或 3

javascript - Lodash 更新另一个数组 Chain/Map 中的元素值

android - 数据库数据变化时ListView新增数据没有直接显示

javascript - Jquery发送post表单ajax不起作用

java - 读取以 [ 开头并以 ] 结尾的 JSON 数据

javascript - 我可以在不使用整个 Meteor 或 Blaze 框架的情况下使用 Minimongo 吗?

java - 在任意事物的列表(数组)中创建关联的最佳方法是什么?