2013-08-28 66 views
1

我正在使用JSONTable插件,並試圖通過從數組對象中動態獲取值來將值傳遞給'head'和'json'。例如,我可以加載一個新的json文件,將其轉換爲js對象並讀取新的'head'和'json'屬性。將動態值傳遞給插件函數jquery

$("#dataTable").jsonTable({ 
    head : ['#','Operating System','Market Share'], 
    json : ['id', 'name', 'share'] 
}); 

我在使用其他插件時遇到了類似的問題。我知道這應該是一個非常明顯的事情,但一直無法弄清楚如何做到這一點。我曾嘗試將整個函數傳遞給一個字符串,但將其呈現爲一個字符串而不是函數對象。任何幫助將不勝感激。謝謝!

+0

沒錯,我正在測試它以檢查它是否符合我的要求。我嘗試了一些與安德烈亞斯彼得森WAtable類似的東西,但偶然發現了這件事。 –

+0

提供鏈接到插件文檔可能會有所幫助。 –

回答

0

您可以在陣列中讀出的第一個項目的屬性,並把它們作爲列名(here是一個測試):

HTML:

<textarea id="data" cols="60" rows="10">[ 
{"id" : 1, "name" : "iOS", "share" : 57.56}, 
{"id" : 2, "name" : "Android", "share" : 24.66}, 
{"id" : 3, "name" : "Java ME", "share" : 10.72}, 
{"id" : 4, "name" : "Symbian", "share" : 2.49}, 
{"id" : 4, "name" : "Blackberry", "share" : 2.26}, 
{"id" : 4, "name" : "Windows Phone", "share" : 1.33} 
]</textarea><br /> 
<input type="button" id="fillButton" value="Fill table" /><br/> 
<table id="dataTable"></table> 

的JavaScript:

function fillTable(tableId, jsonString) { 
    var data = JSON.parse(jsonString), 
     dataColumn, dataColumns = []; 

    if(!(data instanceof Array) || data.length === 0) 
     return; 
    for (dataColumn in data[0]) 
     if (data[0].hasOwnProperty(dataColumn)) 
      dataColumns.push(dataColumn); 
    $("#" + tableId) 
     .html("<table id='" + tableId + "'><thead></thead><tbody></tbody></table>") 
     .jsonTable({ 
      head: dataColumns, 
      json: dataColumns, 
     }) 
     .jsonTableUpdate({ 
      source: data 
     }); 
} 

$("#fillButton").click(function() { 
    fillTable("dataTable", $("#data").val()); 
}); 

結果:

id name   share 
1  iOS    57.56 
2  Android   24.66 
3  Java ME   10.72 
4  Symbian   2.49 
4  Blackberry  2.26 
4  Windows Phone 1.33 

嘗試更改<textarea>中的數據值,然後按按鈕。只有在JSON中的任何地方更改名稱時,才能更改列名稱。

+0

非常感謝您的解決方案! –

+0

不客氣:) – kol