【问题标题】:How to create table with jQuery JSON?如何使用 jQuery JSON 创建表?
【发布时间】:2012-08-18 12:40:24
【问题描述】:

有人可以帮我弄清楚如何在每次循环开始时添加 tr 行。下面是我的 jQuery 代码:

var row = $("<tr></tr>");

     $.each(data.response.docs, function (i,  item) { // json is the name of the object

        row.append('<td>' + item.adServerId + '</td>'); //item is named at the opening of this $.each function
        row.append('<td>' + item.advertiserId + '</td>');
        row.append('<td>' + item.advertiserName + '</td>');
        row.append('<td>' + item.campaignId + '</td>');
        row.append('<td>' + item.campaignName + '</td>');
        row.append('<td>' + item.bookedImps + '</td>');
        row.append('<td>' + item.imps + '</td>');
        row.append('<td>' + item.clicks + '</td>');
        row.append('<td>' + item.ctr + '</td>');
        row.append('<td>' + item.postViewConvs + '</td>');
        row.append('<td>' + item.postViewConvsRate + '</td>');
        row.append('<td>' + item.convs + '</td>');
        row.append('<td>' + item.convsRate + '</td>');
        row.append('<td>' + item.targetRevenue + '</td>');
        row.append('<td>' + item.revenue + '</td>');
        row.append('<td>' + item.cost + '</td>');
        row.append('<td>' + item.startDate + '</td>');
        row.append('<td>' + item.endDate + '</td>,</tr>');
        $("#adcampaignGrid").append(row);

【问题讨论】:

  • 请使用row.append($('&lt;td&gt;').text(whatever)) 而不是串联,它有助于避免 XSS 等,并且通常是一种更好的处理方式。

标签: javascript jquery json html-table jsonp


【解决方案1】:

在循环内移动var row = $('&lt;tr&gt;&lt;/tr&gt;')

 $.each(data.response.docs, function (i,  item) { // json is the name of the object

     var row = $("<tr></tr>");
     // rest of your code
 }

另外,正如@minitech 所说,使用text() 包装item.xxx 以避免将有趣的内容注入您的页面。

对于标题,我建议将标题直接放在 html 上:

http://jsfiddle.net/QtnS4/1/

<table id="aa">
    <thead>
        <tr><th>Col 1</th><th>Col 2</th></tr>       
    </thead>
    <tbody>
    </tbody>

</table>​

JS:

var records = [
    {key: "Value 1", key2: "Value 1b"},
    {key: "Value 2", key2: "Value 2b"}
];

for(var i = 0; i < records.length; i++) {
    var row = $('<tr></tr>');
    row.append($('<td></td>').text(records[i].key));
    row.append($('<td></td>').text(records[i].key2));
    $('#aa').append(row);
}

【讨论】:

  • 另外我该如何添加?我正在尝试实现这种表格格式:&lt;table&gt; &lt;tr&gt; &lt;th&gt;Advertiser&lt;/th&gt; &lt;th&gt;Campaign&lt;/th&gt; &lt;th&gt;Impressions Served&lt;/th&gt; &lt;/tr&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Record 1&lt;/td&gt; &lt;td&gt;Record 3&lt;/td&gt; &lt;td&gt;Record 1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Record 2&lt;/td&gt; &lt;td&gt;Record 2&lt;/td&gt; &lt;td&gt;Record 2&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;
  • @ShoaibUd-Din 对于标题,只需将其直接放在您的 html 表中,而不是从 javascript 中进行,因此您的初始表已经有标题,您所做的只是附加到 tbody。
【解决方案2】:
$.each(data.response.docs, function (i, item) {
  var row = $("<tr></tr>");
  for (var i in item) row.append($('<td>').text(item[i]));
  $("#adcampaignGrid").append(row);
});

或者如果所有键都不需要:

$.each(data.response.docs, function (i, item) {
  var props = [
    'adServerId', 
    'advertiserId', 
    'advertiserName', 
    'campaignId', 
    'campaignName', 
    'bookedImps', 
    'imps', 
    'clicks', 
    'ctr', 
    'postViewConvs', 
    'postViewConvsRate', 
    'convs', 
    'convsRate', 
    'targetRevenue', 
    'revenue', 
    'cost', 
    'startDate', 
    'endDate'
  ];

  var row = $("<tr></tr>");
  for (var i in props) row.append($('<td>').text(item[props[i]]));
  $("#adcampaignGrid").append(row);
});

【讨论】:

  • 另外我该如何添加?我正在尝试实现这种表格格式:&lt;table&gt; &lt;tr&gt; &lt;th&gt;Advertiser&lt;/th&gt; &lt;th&gt;Campaign&lt;/th&gt; &lt;th&gt;Impressions Served&lt;/th&gt; &lt;/tr&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td&gt;Record 1&lt;/td&gt; &lt;td&gt;Record 3&lt;/td&gt; &lt;td&gt;Record 1&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td&gt;Record 2&lt;/td&gt; &lt;td&gt;Record 2&lt;/td&gt; &lt;td&gt;Record 2&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多