0

我想更改此表:

在此处输入图像描述

使用 jQuery 可以吗?

如果是,请向我发送类似的示例或任何解决方法。

编辑:我知道如何阅读所有 td

$('#tableid tbody tr').each(function() {

    $.each(this.cells, function(){
        var celltext = $(this).text();
    });

});

此外,这是如何将每个相似值分组到一个单元格的:

var $rows = $('#tableid tbody tr');
var items = [],
    itemtext = [],
    currGroupStartIdx = 0;
$rows.each(function(i) {
    var $this = $(this);
    var itemCell = $(this).find('td:eq(0)');
    var item = itemCell.text();
    itemCell.remove();
    if ($.inArray(item, itemtext) === -1) {
        itemtext.push(item);
        items.push([i, item]);
        groupRowSpan = 1;
        currGroupStartIdx = i;
        $this.data('rowspan', 1)
    } else {
        var rowspan = $rows.eq(currGroupStartIdx).data('rowspan') + 1;
        $rows.eq(currGroupStartIdx).data('rowspan', rowspan);
    }

});

$.each(items, function(i) {
    var $row = $rows.eq(this[0]);
    var rowspan = $row.data('rowspan');
    $row.prepend('<td rowspan="' + rowspan + '" style="white-space:nowrap;">' + this[1] + '</td>');
});

到目前为止,这是 PHP 解决方案:

foreach($tabledata as $key => $val){
 $rowspan = (count($val) > 1 ? ' rowspan="'.count($val).'" ' : '');
   $spancount = 0;
   foreach($val as $vkey => $vval){
     $spancount++;
      echo '
      <tr>
      ';
       if($spancount == 1){
        echo '
        <td'.$rowspan.'>'.$key.'</td>
        ';
       }
      echo '
      <td>'.$vval[0].'</td>
      ';
      echo '
      <td>'.$vval[1].'</td>
      ';
     if($spancount == 1){
      echo '
      <td'.$rowspan.'>'.$sums[$key].'</td>
      ';
     }
      echo '</tr>
      ';
   }
}
4

2 回答 2

2

嗯,我拍了一下。我冒昧地将类名放入 TD 和 TR,JavaScript 可以清理很多,但它确实有效。

var first_row = '<tr class="row"><td class="id">NULL</td></tr>';
var rowCount = 0;
var rowSum = 0;
$.each($('.row'), function (index, curRow) {
    if ($(first_row).find('.id').text() != $(curRow).find('.id').text()) {
        if (rowCount > 1) {
            $(first_row).find('.val').text(rowSum);
            $(first_row).find('.val').attr('rowspan', rowCount).css('background-color','silver');
            for (i = 0; i < rowCount; i++) {
                $(first_row).next('.row').find('.val').remove();
            }
        }
        first_row = $(curRow);
        rowSum = 0;
        rowCount = 0;
    }
    rowSum += parseInt($(curRow).find('.val').text());
    rowCount += 1;
});
if (rowCount > 1) {
    $(first_row).find('.val').text(rowSum);
    $(first_row).find('.val').attr('rowspan', rowCount).css('background-color','silver');
    for (i = 0; i < rowCount; i++) {
        $(first_row).next('.row').find('.val').remove();
    }
}

链接到演示

于 2013-07-07T18:59:37.777 回答
1

好的,你说你只是想要一个通用的方法,你不需要代码。

循环遍历行。如果 col 0 与上一个不同,则将此行记住为一组的第一行,并将 col 0 的文本记住为“上一个”值。

如果 col 0 与前一个值相同,则将 col 1 的内容添加到集合的第一行的 col 1 中,从该行中删除 col 1,并增加第一行中 col 1 的行跨度。

您的代码中的一个问题:

$rows.data("rowspan")

应该

$this.children("td:eq(1)").attr("rowspan")
于 2013-07-07T18:39:57.737 回答