2013-08-30 19 views
6

テーブル全体を反時計回りに90度回転します。すなわち、 td(行= ith、列= jth)の内容は、td(行=(行の総数-j + 1)番目、列= ith)に転送する必要があります。 div内のテキストも90度回転する必要があります。htmlテーブルを反時計回りに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> 

この表には、私はjavascriptのループによってこれを行うことができます

<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> 

に変換する必要があります。しかし、それは非常に長い。よりエレガントな方法があるかどうかを知りたい。前もって感謝します。

+0

このテーブルをどのように生成しますか? – Alberto

+1

http://stackoverflow.com/questions/2730699/convert-td-columns-into-trrows、http://stackoverflow.com/questions/6297591/how-to-invert-therows-and-columns -html-table – Andreas

+0

@Alberto。配列[[a、1,8]、[b、2,9] ....]から生成されます。全体がアドオンの一部です。 –

答えて

7

div内のテキストも90度回転する必要があります。

基本的には、すべてをブロックとして回転させたいだけですか?

多分あなたはCSSを使うべきですか?

+0

テーブル全体を回転させると、テーブル自体(http://jsfiddle.net/n55XV/)。テーブルの行と列を再配置してtd(s)を回転させる方が良いと思います。 – Alberto

+0

@Alberto:セルだけを回転させても同じ問題が発生します。 http://jsfiddle.net/n55XV/1/を参照してください。それを試しましたか? (私は言葉を少し長くして、効果を少し上手く表現しました) 'transform-origin'やその他のトリックを使って回避することはできますが、むしろ単一の要素(テーブル)で作業するほうがずっと簡単です数十の個々の細胞よりも。 – Spudley

+0

あなたは正しいです!私に気付かせてくれてありがとう! – Alberto

1

このDEMO

参照してみてください:Convert TD columns into TR rowsdavid答え

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; 
} 
+0

ありがとうございます。テキストの回転はどうですか?両方の共通コードが可能だと思いますか?すなわち、テーブルとtd innertextを 'x'度だけ回転させます。 –

+0

これは役立つかもしれません:http:// stackoverflow。com/questions/15806925/how-to-rotate-text-left-90度およびセルサイズはテキストに合わせて調整されます – Robbert

2

すでに回転テーブルを作成することで浮気をしています(配列からテーブルを生成するので簡単です)。 JSテーブルを表示/非表示にするだけです。

チェックこの:http://jsfiddle.net/nUvgp/

PRO:簡単

CONS:重複テーブルコード

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(); 
})