0

我有一些 JSON 例如

Levels = {
    "1" : {
        "level"   : 1,
        "name"    : "blah blah",
        "TTtitle" : "blah blah blah blah"
    },
    "2" : {
        "level"   : 2,
        "name"    : "blah blah",
        "TTtitle" : "blah blah blah blah"
    }
};

当我在每个循环中声明一个函数时,它只在第一个循环中执行,例如

var addIcons;    
$.each(Levels, function(key, value){
       v = value,
       addIcons = function(){                                               
         $(
           '<li class="icon' + key + '">'+                                              
           '<a class="Tip" href="#' + key + '" title="' + v.TTtitle +'"></a>'+
           '</li>'
          ).appendTo('ul');                                     
       }
    });
addIcons();

在循环中声明函数不是一个好主意吗?

如何让每个“级别”的功能触发?

这只是我正在测试的一些代码的示例,因为我在单独的函数中使用了 5 个单独的每个循环,并且正在寻找一种仅遍历 JSON 一次并设置函数的方法。

4

2 回答 2

1

它应该是

$.each(Levels, function(key, value){
    var v = value;
    $('<li class="icon' + key + '">' +                                              
      '<a class="Tip" href="#' + key + '" title="' + v.TTtitle + '">t</a>' +
      '</li>').appendTo('ul');                                     
});

演示:小提琴

但是,如果您想创建一个函数列表并稍后执行它们,请尝试

var addIcons = [];    
$.each(Levels, function(key, value){
    var v = value;

    addIcons.push(function(){                                               
        $(
            '<li class="icon' + key + '">'+                                              
            '<a class="Tip" href="#' + key + '" title="' + v.TTtitle +'"></a>'+
            '</li>'
        ).appendTo('ul');                                     
    })
});

$.each(addIcons, function(idx, fn){
    fn();
})

演示:小提琴

于 2013-08-13T12:14:42.983 回答
0
you can write as follows
$.each(Levels, function(key, value){
   v = value,
     $('ul').append(
       '<li class="icon' + key + '">'+                                              
       '<a class="Tip" href="#' + key + '" title="' + v.TTtitle +'"></a>'+
       '</li>'
      );                                     
});
于 2013-08-13T12:19:34.770 回答