动态重构HTML表

时间:2015-12-10 10:38:42

标签: javascript jquery html

我需要将两个HTML表合并在一起,然后将结果作为单独的表输出。 BeforeTables

函数objectify()找到每个合并前表,并按以下格式将数据放入对象中:object structure

从这一点开始,事情变得棘手。我的standardise()函数循环遍历每个对象,将标题和日期值放入数组中,然后调用removeDuplicates()删除重复项(不言自明)。

然而,当把每个对象合并在一起并将数据输出到表中时,我想不出怎么做。到目前为止,我只能计算如何输出表头,如下所示: aftertab

Here是指向我的codepen的链接。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

我删除了一些你的代码,现在似乎工作了。 http://jsfiddle.net/dt1dmmk2/

function removeDuplicates(array) {
  var cleanValues = [];
  $.each(array, function(i, el) {
    if ($.inArray(el, cleanValues) === -1) cleanValues.push(el);
  });
  return cleanValues;
}
var titles=[];
var totRow=0
  $('.before table').each(function() {
    var rowNumber=$('tr',this).length-1;
    if (totRow<rowNumber)
      totRow=rowNumber;

    var firstCol;
    var secondCol;
    $('tr',this).each(function(index) {
      if (index == 0) {
        firstCol=$('td:first',this).text();
        secondCol=$('td:last',this).text();
        titles.push(firstCol,secondCol)
      } else {
        $('td:first',this).attr('data-col',firstCol);
        $('td:last',this).attr('data-col',secondCol);
      }
    });
  })
  titles=removeDuplicates(titles);
  $('.after table').append('<tr>');
  for (i in titles) {
    $('.after table tr:last').append('<th>' + titles[i] + '</th>');
  }
    for (var b=0;b<totRow;b++) {
      $('.after table').append('<tr />')
      for (i in titles) {
            var textToFill=$('.before td[data-col="'+titles[i]+'"]:first').text();
            $('.after table tr:last').append('<td>'+textToFill+ '</td>');
            $('.before td[data-col="'+titles[i]+'"]:first').removeAttr('data-col')
      }
    }
    $('td[data-col]').removeAttr('data-col'); // just to clean

当然,TR已经在 .before table 中订购,这样您就不需要重新排列新的。

答案 1 :(得分:0)

希望这个fiddle能帮助你理解你缺少的东西;)

/* please check this loop. Here you have to put your cleanYCol as well */
  for (i in cleanXCol) {
    $(resultsTableBody).append("<tr />")
    $('tr:last',resultsTableBody).append("<td>" + cleanXCol[i] + "</td>");
    // $('tr:last',resultsTableBody).append("<td>" + cleanYCol[i] + "</td>");
  }

http://jsfiddle.net/6q9dqozp