4

我正在使用以下代码将表格结构化数据转换为 div。

$('#content').html($('#content').html()
             .replace(/<tbody/gi, "<div id='table'")
             .replace(/<tr/gi, "<div style='overflow:auto;padding-top:15px;'")
             .replace(/<\/tr>/gi, "</div>")
             .replace(/<td/gi, "<span  style='float:left;margin-right:20px;'")
             .replace(/<\/td>/gi, "</span>")
             .replace(/<\/tbody/gi, "<\/div")); 

除了 ROWSPAN 和 COLSPAN 情况外,它在所有情况下都运行良好。

在将 Table 转换为 Div 时如何处理该设计问题?我陷入了困境。

4

2 回答 2

6

也许这会让你朝着正确的方向前进:

.replace(/rowspan="/gi, 'class="rowspan-')
.replace(/colspan="/gi, 'class="colspan-')

然后为类制作样式(例如 rowspan-2 或 colspan-3 等)。但是,这并不能解决一个元素同时具有 row- 和 colspan 的情况,但这是一个开始。

更好的方法是:

var copyAttr = function(old, $new) {
  for(var i = 0,
        attributes = old.attributes;
    i < attributes.length; i++) {

    $new.attr(attributes[i].name, attributes[i].value);
  }
  return $new;
}

$('#content').find('tbody').each(function() {
  var $new = copyAttr(this, $('<div id="table"></div>');
  $(this).replaceWith($new);
}).end().find('tr').each(function() {
  var $new = copyAttr(this, $('<div class="tr"></div>');
  $(this).replaceWith($new);
}).end().find('td').each(function() {
  var $new = copyAttr(this, $('<span class="td"></span>');
  $(this).replaceWith($new);
});

所以现在你已经用 divs 和 spans 替换了整个表结构,以及表元素所具有的所有属性。接下来,您可以将 row- 和 colspan 属性更改为类。

$('#table .td').each(function() {
  var $t = $(this);
  $t
    .addClass('rowspan-'+$t.attr('rowspan'))
    .removeAttr('rowspan')
    .addClass('colspan-'+$t.attr('colspan'))
    .removeAttr('colspan');
});
于 2012-07-12T10:46:37.693 回答
3

为什么要将表格结构化数据转换为 div 而不是首先输出 div 结构化数据?我真的不明白

您可以尝试使用 CSS:

.tablewrapper
{
  position: relative;
}
.table
{
  display: table;
}
.row
{
  display: table-row;
}
.cell
{
  display: table-cell;
  border: 1px solid red;
  padding: 1em;
}
.cell.empty
{
  border: none;
  width: 100px;
}
.cell.rowspanned
{
  position: absolute;
  top: 0;
  bottom: 0;
  width: 100px;
}

您应该得到的一些示例表:

<div class="tablewrapper">
  <div class="table">
    <div class="row">
      <div class="cell">
        Top left
      </div>
      <div class="rowspanned cell">
        Center
      </div>
      <div class="cell">
        Top right
      </div>
    </div>
    <div class="row">
      <div class="cell">
        Bottom left
      </div>
      <div class="empty cell"></div>
      <div class="cell">
        Bottom right
      </div>
    </div>
  </div>
</div>

在您的情况下,这将如下所示:

.replace(/rowspan="/gi, 'class="rowspanned cell')

此示例适用于除 Internet Explorer 7 之外的所有主要浏览器。

于 2012-07-12T10:56:40.473 回答