使用javascript动态更新表

Ala*_*ano 8 javascript ajax jquery

我有一个页面,我向服务器发送ajax请求.页面上有一个表格,显示一些数据.服务器返回一个json对象,该对象是一个对象列表,它不包含该页面的任何布局.

我想通过返回的json 更新表.如何在不使用第三方库且仅使用jquery的情况下执行此操作?我只想要一个粗略的想法和例子.

Onu*_*rım 16

这是演示小提琴.(简单版)
新:查看更新的小提琴(高级版).

假设您已检索到此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' }
];
Run Code Online (Sandbox Code Playgroud)

你有这张桌子:

<table id="data-table">
    <tr><td>There are no items...</td></tr>
</table>
Run Code Online (Sandbox Code Playgroud)

现在,您需要一个可以按可自定义顺序和状态解析值的方法.例如,如果您可以将字段数组传递给解析器函数; 您可以设置字段的顺序,如果您愿意,可以省略一两个字段:

loadTable('data-table', ['field1', 'field2', 'field3'], jsonData);
Run Code Online (Sandbox Code Playgroud)

请注意,field4未解析.

loadTable函数循环遍历返回数组的项,并<tr>在a中创建一个包含每个字段值的项<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);
}
Run Code Online (Sandbox Code Playgroud)

更新:

增加了对支持:

  • 表头
  • 默认文本(用于空列表)
  • 附加清单
  • 清理桌子
  • 等等...

您现在可以简单地包含一个空表,dynamicTable其余部分将处理:

<table id="data-table"></table>
Run Code Online (Sandbox Code Playgroud)

调用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
Run Code Online (Sandbox Code Playgroud)

然后调用dt.load(data);加载新数据(如果有的话,删除前一个列表),
或者调用dt.load(data, true);以在上一个列表的末尾附加新数据.

调用dt.clear();方法将清除整个列表.

这里更新了小提琴.

  • 设法找到问题 - &lt;tr&gt; 的结束标记没有“/”。js 的第 19 行内容如下: row += '&lt;tr&gt;'; 它应该读取 row += '&lt;/tr&gt;'; (2认同)