【问题标题】:Rotate an html table 90 degrees in the anticlockwise direction将 html 表格逆时针旋转 90 度
【发布时间】:2013-09-03 05:02:34
【问题描述】:

我想把整个桌子逆时针旋转 90 度。 IE。 td(row=ith,column=jth) 的内容应该转移到 td(row = (total number of rows-j+1)th , column = ith)。 div 内的文字也应该旋转 90 度。

<table><tbody>
<tr><td>a</td><td>1</td><td>8</td></tr>
<tr><td>b</td><td>2</td><td>9</td></tr>
<tr><td>c</td><td>3</td><td>10</td></tr>
<tr><td>d</td><td>4</td><td>11</td></tr>
<tr><td>e</td><td>5</td><td>12</td></tr>
<tr><td>f</td><td>6</td><td>13</td></tr>
<tr><td>g</td><td>7</td><td>14</td></tr>
</tbody></table>   

此表应转换为

<table><tbody>
<tr>
    <td>8</td><td>9</td><td>10</td><td>11</td>
    <td>12</td><td>13</td><td>14</td>
</tr>
<tr>
    <td>1</td><td>2</td><td>3</td><td>4</td>
    <td>5</td><td>6</td><td>7</td>
</tr>
<tr>
    <td>a</td><td>b</td><td>c</td><td>d</td>
    <td>e</td><td>f</td><td>g</td>
</tr>
</tbody></table> 

我可以通过 javascript 循环来做到这一点。但它很长。我想知道是否有更优雅的方式。提前致谢。

【问题讨论】:

标签: jquery html


【解决方案1】:

试试这个DEMO

参考:Convert TD columns into TR rows 并修改david 答案

TransposeTable('myTable');
function TransposeTable(tableId)
{        
  var tbl = $('#' + tableId);
  var tbody = tbl.find('tbody');
  //var oldWidth = tbody.find('tr:first td').length;
  var oldWidth = 0;
   //calculate column length if there is 'td=span' added    
   $('tr:nth-child(1) td').each(function () {
      if ($(this).attr('colspan')) {
          oldWidth += +$(this).attr('colspan');
      } else {
          oldWidth++;
      }
  });
  var oldHeight = tbody.find('tr').length;
  var newWidth = oldHeight;
  var newHeight = oldWidth;

  var jqOldCells = tbody.find('td');

  var newTbody = $("<tbody></tbody>");
  for(var y=newHeight; y>=0; y--)
  {
      var newRow = $("<tr></tr>");
      for(var x=0; x<newWidth; x++)
      {
          newRow.append(jqOldCells.eq((oldWidth*x)+y));
      }
      newTbody.append(newRow);
  }

  tbl.addClass('rotate');

  tbody.replaceWith(newTbody);        
}  

根据Robbert 的建议 CSS

.rotate {
  -moz-transform: rotate(-90.0deg);  /* FF3.5+ */
  -o-transform: rotate(-90.0deg);  /* Opera 10.5 */
  -webkit-transform: rotate(-90.0deg);  /* Saf3.1+, Chrome */
  filter:  progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083);  /* IE6,IE7 */
  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0.083)"; /* IE8 */

  padding-right:50px;
}

【讨论】:

  • 谢谢人。旋转文本呢?你认为两者的共同代码是可能的吗? IE。将表格和 td 内部文本旋转“x”度。?
  • 这可能会有所帮助:stackoverflow.com/questions/15806925/…
【解决方案2】:

通过创建一个已经旋转的表格来作弊(因为您从数组生成表格,所以这很简单)。 JS 只是为了隐藏/显示表格。

检查这个:http://jsfiddle.net/nUvgp/

专业版:简单

缺点:重复的表代码

HTML:

<a href="#" id="rotate">Rotate!</a>
<table id='myTable'><tbody>
<tr><td>a</td><td>1</td><td>8</td></tr>
<tr><td>b</td><td>2</td><td>9</td></tr>
<tr><td>c</td><td>3</td><td>10</td></tr>
<tr><td>d</td><td>4</td><td>11</td></tr>
<tr><td>e</td><td>5</td><td>12</td></tr>
<tr><td>f</td><td>6</td><td>13</td></tr>
<tr><td>g</td><td>7</td><td>14</td></tr>
</tbody></table>
<table id='myRotatedTable'><tbody>
<tr>
    <td>8</td><td>9</td><td>10</td><td>11</td>
    <td>12</td><td>13</td><td>14</td>
</tr>
<tr>
    <td>1</td><td>2</td><td>3</td><td>4</td>
    <td>5</td><td>6</td><td>7</td>
</tr>
<tr>
    <td>a</td><td>b</td><td>c</td><td>d</td>
    <td>e</td><td>f</td><td>g</td>
</tr>
</tbody></table> 

CSS:

#myRotatedTable {
    display:none;
}
#myRotatedTable td {
    -webkit-transform: rotate(270deg);
    -moz-transform: rotate(270deg);
    -o-transform: rotate(270deg);
    writing-mode: lr-tb;
}

JS:

$('#rotate').click(function (e) {
    e.preventDefault();
    $("#myTable").toggle();
    $("#myRotatedTable").toggle();
})

【讨论】:

    【解决方案3】:

    div 内的文字也应该旋转 90 度。

    所以基本上你只是想把整个东西作为一个块旋转?

    也许你应该只使用 CSS?

    #myTable {
        transform:rotate(270deg);
    }
    

    【讨论】:

    • 旋转整个表格,您将无法控制表格本身的位置 (jsfiddle.net/n55XV)。我认为最好重新排列表格行和列,然后旋转 td(s)。
    • @Alberto:如果只旋转单元格,也会遇到同样的问题。见jsfiddle.net/n55XV/1。你试过了吗? (为了更好地展示效果,我将文字加长了一些)您可以使用transform-origin 和其他技巧来解决它,但是使用单个元素(即表格)而不是几十个元素要容易得多单个细胞。
    • 太棒了,正是我需要的。竖起大拇指。 [+1]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-05
    • 2011-09-09
    相关资源
    最近更新 更多