質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

9332閲覧

rowspan,colspan入テーブルの行列入れ替えをしたい

kutu

総合スコア257

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

3グッド

5クリップ

投稿2016/04/14 02:06

下記のような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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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
tkturbo

総合スコア5572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mpyw

2016/04/14 06:46

いい線いってますがrowspanがネストしたときに壊れますね. <table border="1"> <tr> <th colspan="2">ハンドルネーム</th> <td colspan="2">mpyw</td> </tr> <tr> <th rowspan="4">趣味</th> <th>麻雀</th> <td colspan="2">三麻しかやりません</td> </tr> <tr> <th rowspan="3">プログラミング</th> <td colspan="2">PHP</td> </tr> <tr> <td>JavaScript</td> <td rowspan="2">初心者</td> </tr> <tr> <td>Ruby</td> </tr> </table>
tkturbo

2016/04/14 06:50

orz 。。。ちなみに一つのcolumnにcolspan・rowspanの両方が指定されていても壊れるのです。
mpyw

2016/04/14 06:53

ググってみた感じ誰も完璧なコードを書いていなかったので,完成したらjQueryプラグインにでもすればすごい需要あるかも…
mpyw

2016/04/14 07:36

検証用にお使いください… <table border="1"> <tr> <th colspan="2">ハンドルネーム</th> <td colspan="3">mpyw</td> <td>a</td> </tr> <tr> <th rowspan="5">趣味</th> <th rowspan="2">麻雀</th> <td>三麻</td> <td colspan="2">◎</td> <td>b</td> </tr> <tr> <td>四麻</td> <td>△</td> <td>初心者</td> <td>c</td> </tr> <tr> <th rowspan="3" colspan="2">プログラミング</th> <td colspan="2">PHP</td> <td>d</td> </tr> <tr> <td>JavaScript</td> <td rowspan="2">初心者</td> <td>e</td> </tr> <tr> <td>Ruby</td> <td>f</td> </tr> <tr> <td>A</td> <td>B</td> <td>C</td> <td>D</td> <td>E</td> <td>*</td> </tr> </table> <table border="1"> <tr> <th rowspan="2">ハンドルネーム</th> <th colspan="5">趣味</th> <td>A</td> </tr> <tr> <th colspan="2">麻雀</th> <th colspan="3" rowspan="2">プログラミング</th> <td>B</td> </tr> <tr> <td rowspan="3">mpyw</td> <td>三麻</td> <td>四麻</td> <td>C</td> </tr> <tr> <td rowspan="2">◎</td> <td>△</td> <td rowspan="2">PHP</td> <td>JavaScript</td> <td>Ruby</td> <td>D</td> </tr> <tr> <td>初心者</td> <td colspan="2">初心者</td> <td>E</td> </tr> <tr> <td>a</td> <td>b</td> <td>c</td> <td>d</td> <td>e</td> <td>f</td> <td>*</td> </tr> </table>
tkturbo

2016/04/14 07:39

とりあえず修正版をうpしてみますた。 検証ソースありがとうございます> CertaiNさん
mpyw

2016/04/14 07:45

完璧ですね!
tkturbo

2016/04/14 15:06

ちなみに 「すごい需要」←ないないw
laqxvf

2019/05/28 01:49

教えてください。 このスクリプトはどのようにして特定のテーブルに適用するのでしょうか? tabidというのがテーブルのIDなのでしょうか?
guest

0

こちらのを修正すれば使えるのではないでしょうか?
jQueryでテーブルの行と列を入れ替える

投稿2016/04/14 02:56

kaputaros

総合スコア1844

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kutu

2016/04/14 02:57

こちらは調べましたが rowspan,colspanに対応していないようでした
kaputaros

2016/04/14 03:00

なので、修正加工すればいいのでは?と。
mpyw

2016/04/14 06:54

修正加工は容易ではないですね.
mpyw

2016/04/14 07:36 編集

(投稿ミスにつき削除)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問