如何在json中读取表中的表

时间:2012-07-18 20:07:43

标签: javascript jquery jquery-selectors

我得到了这个json对象,其结构类似于:

vendor have name, phone, fax, contacts
contacts have firstName, lastName, title, phone, email

我已经在表格中创建了第一个级别,但我没有创建第二个嵌套级别

function getData(vType) {
                $.getJSON('/LocalApp/VendorController', {
                    vendorType : vType,
                    time : "2pm"
                }, function(vendorsJson) {
                    $('#vendors').find("tr:gt(0)").remove();

                    var vendorTable = $('#vendors');

                    $.each(vendorsJson, function(index, vendor) {
                        $('<tr>').appendTo(vendorTable).append(
                                $('<td>').text(vendor.name)).append(
                                $('<td>').text(vendor.phone)).append(
                                $('<td>').text(vendor.fax)).append(
                                '<table class="contactTable"><tr><th>First Name</th><th>Last Name</th><th>Title</th><th>Phone</th><th>E-Mail</th></tr></table>');

                    });
                });
            }

那么如何在jQuery代码中将vendor.contacts添加为嵌套表? 我知道我的代码不干净,与Java相比,jquery让我感到困惑

2 个答案:

答案 0 :(得分:0)

不确定您是否希望将该表放在供应商的单元格中,但尝试这样的事情......

var contactTableHtml = '<table class="contactTable"><tr><th>First Name</th><th>Last Name</th><th>Title</th><th>Phone</th><th>E-Mail</th></tr></table>';

var vendorTableContent = $.map(vendorsJson,function (index, vendor) {

    var contactTableContentHtml = $.map(vendor.contacts,function (index, contact) {
        return "<tr><td>" + contact.firstName + "</td><td>" + contact.lastName + "</td><td>" + contact.title + "</td><td>" + contact.phone + "</td><td>" + contact.email + "</td></tr>";
    }).join("");

    return '<tr>' +
        '<td>' + vendor.name + '</td>' +
        '<td>' + vendor.phone + '</td>' +
        '<td>' + vendor.fax + '</td>' +
        '<td>' + contactTableHtml + contactTableContentHtml + '</td>' +
        '</tr>';

}).join("");

vendorTable.append(vendorTableContent);

首先,我将子表创建为字符串,然后将其添加到主表中。我还建议创建一个大的html字符串并将其添加到DOM中。这比每次调用$('...')要快得多。

PS。一直无法测试,但如果您收到错误,请告诉我。

答案 1 :(得分:0)

除非您对页面发送的数量有多大限制(即每一K数据对您不利),否则我认为jQuery不适合这类事情。

我想到JSON +某事=&gt; HTML是模板化的,所以我通常使用像Handlebars这样的JavaScript模板工具来做这种事情。这是更自然的契合。此外,您现在可以尝试使用Try Handlebars.js这样的网站来交互式地制作一个模板,该模板可以获取您的一些示例JSON并输出您想要的HTML。

很可能,其中包含另一个{{#each}}的{{#each}}可能会处理嵌套JSON到您所追求的任何HTML的转换。