回答編集履歴
1
バグ修正版ソースを追加
answer
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
```javascript
|
4
4
|
function switchColsAndRows(tabid){
|
5
|
+
// バグ放置版
|
5
6
|
var cols = [];
|
6
7
|
var rowIndex = 0;
|
7
8
|
var maxColSize = 0;
|
@@ -47,5 +48,66 @@
|
|
47
48
|
tab.append(tr[0]);
|
48
49
|
}
|
49
50
|
}
|
51
|
+
```
|
50
52
|
|
53
|
+
追記:
|
54
|
+
上のソースは戒めとして放置。
|
55
|
+
・一つのtd/thタグにcolspan、rowspanの両方が設定されているときに表示が壊れるのを修正
|
56
|
+
・ CertaiNさんの指摘にあったrowspanのネスト時に表示が壊れるのを修正
|
57
|
+
|
58
|
+
|
59
|
+
```javascript
|
60
|
+
// たぶん完成版???
|
61
|
+
function switchColsAndRows(tabid){
|
62
|
+
var cols = [];
|
63
|
+
var rowIndex = 0;
|
64
|
+
var maxColSize = 0;
|
65
|
+
var tab = $('#' + tabid);
|
66
|
+
// consider colspan value first
|
67
|
+
tab.find('tr').each(function(){
|
68
|
+
if(!cols[rowIndex]){ cols[rowIndex] = []; }
|
69
|
+
var colIndex = 0;
|
70
|
+
$(this).find('td, th').each(function(){
|
71
|
+
var colspan = $(this).attr('colspan');
|
72
|
+
var colsize = (!colspan)?1:parseInt(colspan);
|
73
|
+
cols[rowIndex][colIndex] = $(this)[0];
|
74
|
+
for(var k = 1; k < colsize; k++){
|
75
|
+
cols[rowIndex][colIndex + k]={ omittable:true, rowspan:$(this).attr('rowspan')};
|
76
|
+
}
|
77
|
+
colIndex += colsize;
|
78
|
+
maxColSize = (cols[rowIndex].length > maxColSize)?cols[rowIndex].length:maxColSize;
|
79
|
+
});
|
80
|
+
rowIndex++;
|
81
|
+
});
|
82
|
+
// consider rowspan value next
|
83
|
+
for(var i = 0; i < cols.length; i++){
|
84
|
+
for(var j = 0; j < cols[i].length; j++){
|
85
|
+
var rowspan = $(cols[i][j]).attr('rowspan');
|
86
|
+
rowspan = (rowspan)?rowspan:cols[i][j].rowspan;
|
87
|
+
var rowsize = (!rowspan)?1:parseInt(rowspan);
|
88
|
+
for(var x = 1; x < rowsize && cols[i+x]; x++){
|
89
|
+
cols[i+x].splice(j, 0, { omittable : true, rowspan : 1});
|
90
|
+
}
|
91
|
+
}
|
92
|
+
}
|
93
|
+
tab.empty();
|
94
|
+
var initAttr = function(elm,name,val){$(elm).removeAttr(name);$(elm).attr(name, val);};
|
95
|
+
var replaceAttr = function(elm,name1,name2,v1,v2){
|
96
|
+
v1=$(elm).attr(name1);v2=$(elm).attr(name2);
|
97
|
+
initAttr(elm,name1,v2);initAttr(elm,name2,v1);
|
98
|
+
};
|
99
|
+
// rebuild table
|
100
|
+
for(var i = 0; i < maxColSize; i++){
|
101
|
+
var tr = $('<tr />');
|
102
|
+
for(var j = 0; j < cols.length; j++){
|
103
|
+
if(cols[j] && cols[j][i] && (!cols[j][i].omittable)){
|
104
|
+
var col = cols[j][i];
|
105
|
+
replaceAttr(col, 'rowspan', 'colspan');
|
106
|
+
tr.append(col);
|
107
|
+
}
|
108
|
+
}
|
109
|
+
tab.append(tr[0]);
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
51
|
-
```
|
113
|
+
```
|