9

我有一个名为 reservations.js 的 js 文件,在这个文件中我有一个预订数组,例如:

var reservations = [
  { "HotelId": "01", "HotelName": "SPA", "ReservNum": "0166977", "Guest Name": "Jonny", "Room": null, "Type": "SUIT", "Rooms": "1", "Board": "BB", "Status": "IH", "Pax": "2,0,0,0", "Arrival": "07/08/12", "Departure": "09/08/12", "AgentDesc": "FIT", "AgentCode": "FIT", "Group": null, "Balance": "0", "Requests": "", "Remarks": null, "Fit/Group": "FIT", "ReturnGuestName": "", "StatusColor": "LightCoral" },
  { "HotelId": "01", "HotelName": "SPA", "ReservNum": "H000192", "Guest Name": null, "Room": null, "Type": "Folio", "Rooms": "0", "Board": "", "Status": "IH", "Pax": "0,0,0,0", "Arrival": "07/08/12", "Departure": "10/09/12", "AgentDesc": "movies", "AgentCode": "001", "Group": null, "Balance": "0", "Requests": "", "Remarks": "", "Fit/Group": "FIT", "ReturnGuestName": "", "StatusColor": "LightCoral" }
];

我需要做的是创建一个包含 6 个列的表(在 html 中):Res。号码、客人姓名、状态、到达日期、离开日期、房间类型。并将数组中的元素插入到表中匹配的 col 中。

示例:ReservNum": "0166977",因此数字 0166977 将在第一列 Res. Number 中。

我的桌子是这样的:

<table id="reservations">
        <thead>
            <tr>
                <th>Res. Number</th><th>Guest Name</th><th>Status</th><th>Arrival Date</th><th>Departure Date</th><th>Room Type</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>resnum</td><td>guestname</td><td>status</td><td>arrivaldate</td><td>departuredate</td><td>roomtype</td>
            </tr>
        </tbody>
    </table>

我不知道该怎么做。我试图在 js 文件中做这样的事情:

$('#reservations tr').each(function (i) {
    $(this).find('td').html(reservations[i]);
});

但它不起作用。(也许我的 html 表是错误的或者是 js,甚至两者都有)。

我是 js/jquery 的新手,所以我有点不确定自己在做什么。

4

4 回答 4

18

如下所示(检查工作演示):

var tbody = $('#reservations tbody'),
    props = ["ReservNum", "Guest Name", "Status", "Arrival", "Departure", "Type"];
$.each(reservations, function(i, reservation) {
  var tr = $('<tr>');
  $.each(props, function(i, prop) {
    $('<td>').html(reservation[prop]).appendTo(tr);  
  });
  tbody.append(tr);
});
于 2012-12-23T09:18:46.430 回答
1

我不确定这是否是您想要的,但有jqGrid。它可以接收 JSON 并制作网格。

或者你也可以在 Github 上使用这个简单的项目:Json-To-HTML-Table

或者您也可以使用 jQuery 自己制作,这会更简单。

以下将采用数组数组并将它们存储转换为行和单元格。

$.getJSON(url , function(data) {
    var tbl_body = "";
    $.each(data, function() {
        var tbl_row = "";
        $.each(this, function(k , v) {
            tbl_row += "<td>"+v+"</td>";
        })
        tbl_body += "<tr>"+tbl_row+"</tr>";                 
    })
    $("#target_table_id tbody").html(tbl_body);
});

您可以通过添加类似的内容来检查要排除的键

var expected_keys = { key_1 : true, key_2 : true, key_3 : false, key_4 : true };

在 getJSON cbf 的开头并添加

if ( ( k in expected_keys ) && expected_keys[k] ) {
...
}

在 tbl_row += 线周围。

于 2012-12-23T09:17:12.160 回答
1

像这样:

$('#reservations tr').each(function (i) {
   var td = $(this).find('td');
   td.html(reservations[i]['ReservNum']);
   td = td.next();
   td.html(reservations[i]['Guest Name']);
   td = td.next();
   td.html(reservations[i]['Status']);
   td = td.next();
   td.html(reservations[i]['Arrival']);
   td = td.next();
   td.html(reservations[i]['Departure']);
   td = td.next();
   td.html(reservations[i]['Type']);
   td = td.next();
   td.html(reservations[i]['Rooms']);
   td = td.next();
   td.html(reservations[i]['Board']);
});
于 2012-12-23T09:25:19.273 回答
0

我建议使用jquery.tmpl方法。

在 HTML 中

<script id="template-table" type="text/x-jquery-tmpl">
        <tr>
            <th>Res. Number</th><th>Guest Name</th><th>Status</th><th>${Arrival}</th><th>${Departure}</th><th>Room Type</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>${ReservNum}</td><td>${Guest_Name}</td><td>${Status}</td><td>arrivaldate</td><td>departuredate</td><td>${Type}</td>
        </tr>
    </tbody> 
</script>

在 JS 中:

var reservations = [...];
$("#template-table").tmpl(reservations);
于 2012-12-23T09:23:47.120 回答