我有一个页面,我向服务器发送ajax请求。页面上有一个表格,显示一些数据。服务器返回一个json对象,该对象是一个对象列表,它不包含该页面的任何布局。
我想通过返回的json更新表行。如何在不使用第三方库且仅使用jquery的情况下执行此操作?我只想要一个粗略的想法和例子。
答案 0 :(得分:15)
这是demo fiddle。 (简单版)
新: 请参阅updated fiddle(高级版)。
假设您已检索到此JSON数据:
var jsonData = [
{ field1: 'value a1', field2: 'value a2', field3: 'value a3', field4: 'value a4' },
{ field1: 'value b1', field2: 'value b2', field3: 'value b3', field4: 'value b4' },
{ field1: 'value c1', field2: 'value c2', field3: 'value c3', field4: 'value c4' }
];
你有这张桌子:
<table id="data-table">
<tr><td>There are no items...</td></tr>
</table>
现在,您需要一个可以按自定义顺序和状态解析值的方法。例如,如果您可以将字段数组传递给解析器函数;您可以设置字段的顺序,如果您愿意,可以省略一两个字段:
loadTable('data-table', ['field1', 'field2', 'field3'], jsonData);
请注意,field4
未被解析。
loadTable
函数遍历返回数组的项目,并在<tr>
内创建<td>
每个字段值。这是一个简单的功能:
function loadTable(tableId, fields, data) {
//$('#' + tableId).empty(); //not really necessary
var rows = '';
$.each(data, function(index, item) {
var row = '<tr>';
$.each(fields, function(index, field) {
row += '<td>' + item[field+''] + '</td>';
});
rows += row + '<tr>';
});
$('#' + tableId).html(rows);
}
添加了对以下内容的支持:
您现在可以只包含一个空表,而dynamicTable
将负责其余的工作:
<table id="data-table"></table>
调用dynamicTable.config()
方法配置表:
var dt = dynamicTable.config('data-table', //id of the table
['field2', 'field1', 'field3'], //field names
['header 1', 'header 2', 'header 3'], //set to null for field names to be used as header names instead of custom headers
'There are no items to list...'); //default text for no items
然后调用dt.load(data);
加载新数据(删除前一个列表,如果有的话),
或者调用dt.load(data, true);
将新数据附加到上一个列表的末尾。
调用dt.clear();
方法将清除整个列表。
答案 1 :(得分:1)
您可以遍历JSON对象。
$.each(JSON_Object, function(key, value) {
// Write your code here
});
然后,您只需在表格中添加数据即可。
$('#yourTableName tr:last').after('<tr><td>John</td><td>$500</td></tr>');
由于您特别提到您不需要第三方库,因此您可以执行上述操作。但是,如果您需要包含所有功能的数据集,则可以考虑使用http://datatables.net/之类的插件。