1

我在 PHP 中有 3 个字符串,它们作为 aData[4]、aData[5] 和 aData[6] 传递给 JQuery

这样:

        function fnFormatDetails ( oTable, nTr )
    {
        var aData = oTable.fnGetData( nTr );
        var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
        sOut += '<thead><tr><td>UPC</td><td>Item Description</td><td>Total</td></tr></thead>';
        sOut += '<tbody><tr><td>'+aData[4]+'</td><td>'+aData[5]+'</td><td>'+aData[6]+'</td></tr></tbody>';
        sOut += '</table>';

        return sOut;
    }

显示:

    UPC                         Description         Total
    0004712503209,0004712503201 MARIONBRY,APPLE PIE 37.65,33.29

我希望每个 UPC/Description/Total 有一行,所以结果是:

UPC             Description      Total
0004712503209   MARIONBRY        37.65
0004712503201   APPLE PIE        33.29

如何在 JQuery 中解析这些字符串?

4

2 回答 2

1

您需要的并不是真正的 jQuery……只是普通的旧 JavaScript。

function fnFormatDetails ( oTable, nTr )
{
    var aData = oTable.fnGetData( nTr );
    var length = aData[4].split(",").length;
    var sOut = '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">';
    sOut += '<thead><tr><td>UPC</td><td>Item Description</td><td>Total</td></tr></thead>';
    for (var i = 0; i < length; i += 1) {
        sOut += '<tbody><tr><td>'+aData[4].split(",")[i]+'</td><td>'+aData[5].split(",")[i]+'</td><td>'+aData[6].split(",")[i]+'</td></tr></tbody>';
    }
    sOut += '</table>';

    return sOut;
}

请注意,这不是非常有效,因为您为每个循环迭代调用 split 三次。这只是最快的解决方案,不会创建大量其他变量,也不会使事情进一步复杂化。aData[5].split(",")(顺便说一句,它还假设数组长度 aData[4].split(",") 将与and完全相同aData[6].split(",")。但是,这又是一个简单的解决方案,您可以添加任何其他有价值的增强功能认为对您的申请有必要。

于 2013-10-01T03:30:19.273 回答
0

您是否有理由不在 PHP 端这样做?您可以像下面那样在 jQuery 中执行此操作,但如果客户端禁用了 JavaScript,它将无法工作。

jQuery:

var newRow = '<tr>';
$('tbody tr').children().each(function() {
    var arr = $(this).html().split(',');
    $(this).html(arr[0]);
    newRow += '<td>' + arr[1] + </td>;
});
newRow += '</tr>';
$('tbody').append(newRow);

jsFiddle

PS:这仅在您有两个值时才有效。如果您有超过 2 个值,则需要遍历这些值并为每个值添加一个新行。

于 2013-10-01T03:31:51.550 回答