下記のようなcolspan,rowspanが適用されたテーブルをhtml5で作成しています
内容的には下記のタグ通りになるのですが、出力時は
行と列が逆のほうがユーザーに伝わりやすい内容です
rowspanはcolspanに
colspanはrowspanに
変換し、行と列を入れ替えて(縦と横を入れ替えて)表示させるツール等をご存じの方はいらっしゃいませんでしょうか?
<table> <tr> <th>見出し1</th> <th>見出し2</th> <th>見出し3</th> <th>見出し4</th> </tr> <tr> <td>1-1</td> <td>1-2</td> <td>1-3</td> <td>1-4</td> </tr> <tr> <td>2-1</td> <td colspan="2">2-2</td> <td rowspan="2">2-4</td> </tr> <tr> <td>3-1</td> <td>3-2</td> <td>3-3</td> </tr> </table>mpyw, dsk, x_xが👍を押しています
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
ためしに書いてみたら、地味にめんどくさかった。。。
javascript
1function switchColsAndRows(tabid){ 2 // バグ放置版 3 var cols = []; 4 var rowIndex = 0; 5 var maxColSize = 0; 6 var tab = $('#' + tabid); 7 // consider colspan value 8 tab.find('tr').each(function(){ 9 if(!cols[rowIndex]){ cols[rowIndex] = []; } 10 var colIndex = 0; 11 $(this).find('td, th').each(function(){ 12 var colspan = $(this).attr('colspan'); 13 var colsize = (!colspan)?1:parseInt(colspan); 14 cols[rowIndex][colIndex] = $(this)[0]; 15 colIndex += colsize; 16 maxColSize = (cols[rowIndex].length > maxColSize)?cols[rowIndex].length:maxColSize; 17 }); 18 rowIndex++; 19 }); 20 // consider rowspan value 21 for(var i = 0; i < cols.length; i++){ 22 for(var j = 0; j < cols[i].length; j++){ 23 var rowspan = $(cols[i][j]).attr('rowspan'); 24 var rowsize = (!rowspan)?1:parseInt(rowspan); 25 for(var x = 1; x < rowsize; x++){ 26 cols[i+x].splice(j, 0, null); 27 } 28 } 29 } 30 tab.empty(); 31 var initAttr = function(elm,name,val){$(elm).removeAttr(name);$(elm).attr(name, val);}; 32 var replaceAttr = function(elm,name1,name2,v1,v2){ 33 v1=$(elm).attr(name1);v2=$(elm).attr(name2); 34 initAttr(elm,name1,v2);initAttr(elm,name2,v1); 35 }; 36 for(var i = 0; i < maxColSize; i++){ 37 var tr = $('<tr />'); 38 for(var j = 0; j < cols.length; j++){ 39 if(cols[j] && cols[j][i]){ 40 var col = cols[j][i]; 41 replaceAttr(col, 'rowspan', 'colspan'); 42 tr.append(col); 43 } 44 } 45 tab.append(tr[0]); 46 } 47}
追記:
上のソースは戒めとして放置。
・一つのtd/thタグにcolspan、rowspanの両方が設定されているときに表示が壊れるのを修正
・ CertaiNさんの指摘にあったrowspanのネスト時に表示が壊れるのを修正
javascript
1// たぶん完成版??? 2function switchColsAndRows(tabid){ 3 var cols = []; 4 var rowIndex = 0; 5 var maxColSize = 0; 6 var tab = $('#' + tabid); 7 // consider colspan value first 8 tab.find('tr').each(function(){ 9 if(!cols[rowIndex]){ cols[rowIndex] = []; } 10 var colIndex = 0; 11 $(this).find('td, th').each(function(){ 12 var colspan = $(this).attr('colspan'); 13 var colsize = (!colspan)?1:parseInt(colspan); 14 cols[rowIndex][colIndex] = $(this)[0]; 15 for(var k = 1; k < colsize; k++){ 16 cols[rowIndex][colIndex + k]={ omittable:true, rowspan:$(this).attr('rowspan')}; 17 } 18 colIndex += colsize; 19 maxColSize = (cols[rowIndex].length > maxColSize)?cols[rowIndex].length:maxColSize; 20 }); 21 rowIndex++; 22 }); 23 // consider rowspan value next 24 for(var i = 0; i < cols.length; i++){ 25 for(var j = 0; j < cols[i].length; j++){ 26 var rowspan = $(cols[i][j]).attr('rowspan'); 27 rowspan = (rowspan)?rowspan:cols[i][j].rowspan; 28 var rowsize = (!rowspan)?1:parseInt(rowspan); 29 for(var x = 1; x < rowsize && cols[i+x]; x++){ 30 cols[i+x].splice(j, 0, { omittable : true, rowspan : 1}); 31 } 32 } 33 } 34 tab.empty(); 35 var initAttr = function(elm,name,val){$(elm).removeAttr(name);$(elm).attr(name, val);}; 36 var replaceAttr = function(elm,name1,name2,v1,v2){ 37 v1=$(elm).attr(name1);v2=$(elm).attr(name2); 38 initAttr(elm,name1,v2);initAttr(elm,name2,v1); 39 }; 40 // rebuild table 41 for(var i = 0; i < maxColSize; i++){ 42 var tr = $('<tr />'); 43 for(var j = 0; j < cols.length; j++){ 44 if(cols[j] && cols[j][i] && (!cols[j][i].omittable)){ 45 var col = cols[j][i]; 46 replaceAttr(col, 'rowspan', 'colspan'); 47 tr.append(col); 48 } 49 } 50 tab.append(tr[0]); 51 } 52} 53
投稿2016/04/14 05:33
編集2016/04/14 07:36総合スコア5572
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/14 06:46
2016/04/14 06:50
2016/04/14 06:53
2016/04/14 07:36
2016/04/14 07:39
2016/04/14 07:45
2016/04/14 15:06
2019/05/28 01:49