2012-07-30 172 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

相關問題