2012-07-30 126 views
1

我使用$.getJSON生成了一个JavaScript对象(称为'jItems')。在页面上,我列出了jItem中的项目适合的类别列表。我的愿望是点击一个类别并触发一个功能,只显示该类别中的项目。使用getJson或jquery的each()find()jItems中拉出正确的项目会更好吗?什么是解析JSON字符串的最佳方法?

+1

'getJson'拉动来自服务器的JSON字符串。你不需要使用它吗? – pb2q 2012-07-30 18:26:43

+1

存储'getJSON'调用的结果,然后通过单击解析您需要的部分... – TheZ 2012-07-30 18:27:07

+1

'.find()'仅适用于DOM元素。 – 2012-07-30 18:27:23

回答

1

这一切都取决于你的数据看起来的样子,但是这可能会帮助你,我想:

var jsonCats = [ 
    {"id": "category1", "items": [{"iid":"item1"}, {"iid":"item2"}, {"iid":"item3"}]}, 
    {"id": "category2", "items": [{"iid":"item4"}, {"iid":"item5"}, {"iid":"item6"}]}, 
    {"id": "category3", "items": [{"iid":"item7"}, {"iid":"item8"}, {"iid":"item9"}]}, 
    {"id": "category4", "items": [{"iid":"item0"}]} 
]; 

$.each(jsonCats, function(key, value) { 
    var category = $("<li>" + this.id + "</li>"); 
    var items = this.items; 

    $("#categories").append(category); 

    category.click(function() { 
     $("#items").empty(); 
     for (var j in items) { 
      var item = $("<option>" + items[j].iid + "</option>"); 

      $("#items").append(item); 
     } 
    }); 
}); 

要查看示例:http://jsfiddle.net/tive/U63EY/

编辑: 现在我再次看了你的问题。 ..因为速度更快,所以使用for循环更好。 $ .each()无论如何都是for循环的封装。 (因此,例如:d)

http://jsperf.com/jquery-each-vs-for-loop/6

1

JSON的美妙之处在于您无需解析它。它已经是一个JavaScript对象。你需要做的是循环访问值并为你的分类列表建立输出。

没有看到您的JSON结构我不能再提出任何建议。

+1

你的意思是,'$ .getJSON'的美丽,对吧? (JSON是一个字符串值,它需要通过'JSON.parse()'或类似的函数来解析,以获得相应的对象值。) – 2012-07-30 18:35:26

+1

这只有在通过AJAX获取时才需要。 JSON本身不需要这个。 – 2012-07-30 18:39:50

+3

我认为你使用JavaScript的对象字面符号来混淆JSON。例如:'var json ='{“foo”:123}'; var obj = {foo:123};'。根据定义,JSON是一个字符串(值)。首先需要将其解析为对象值。如果你的意思不是一个字符串,那么它不是JSON。 – 2012-07-30 18:45:34

相关问题