• ベストアンサー

テーブル列の表示・非表示機能の追加

<table border="0" id="tbl1"> <tr> <th>A1</td> <th>B1</td> <th colspan="2">C1</td> </tr> <tr> <td>aaa</td> <td>bbb</td> <td>ccc</td> <td>ddd</td> </tr> <tr> <td>aaa</td> <td>bbb</td> <td>ccc</td> <td>ddd</td> </tr> </table> というテーブルで、C1列(要はデータcccとdddの2列)を表示/非表示を行いたいです。 調べてみたところ、colspanが設定されている例がありませんでした。 お判りになる方、よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.11

rowSpan が、からむとてーぶるのてんかいが、ちょうめんどう! いじでも といてやろうと かんがえたあげく、こんなのが・・・ 上級者の方の解法をお願いします。 <button onClick="test('tbl1','list1')">隠す</button> <table border="1" cellpadding="2" cellspacing="1" id="tbl1"> <tr> <th rowspan="3">AAA</th> <th colspan="3" id="list1">BBB</th> </tr> <tr> <th width="120">BBB1</th> <th width="120">BBB2</th> <th width="120">BBB3</th> </tr> <tr> <th>BBB11</th> <th>BBB21</th> <th>BBB31</th> </tr> <tr> <td>aaa</td> <td>aaa1</td> <td>aaa2</td> <td>aaa3</td> </tr> <tr> <td>bbb</td> <td>bbb1</td> <td>bbb2</td> <td>bbb3</td> </tr> <tr> <td>ccc</td> <td>ccc1</td> <td>ccc2</td> <td>ccc3</td> </tr> </table> <script type="text/javascript"> <!-- function test(tableID, targetID) {  var tr = document.getElementById(tableID).rows;  var eTgt = document.getElementById(targetID);  var x1 = eTgt.offsetLeft;  var x2 = x1 + eTgt.offsetWidth;  var d = [];  var o1, o2;  var c1 = 0, c2, c3 = 0;    while (o1 = tr[c1++]) {   c2 = 0;   while (o2 = o1.cells[c2++])    if (x1 <= o2.offsetLeft && o2.offsetLeft < x2) d.push(o2);  }  while (o1 = d[c3++]) o1.style.display = 'none'; } //--> </script>

ikeike77
質問者

お礼

長々お付き合いくださり、ありがとうございました。 ようやく所望のものが出来上がりました。

その他の回答 (10)

回答No.10

test('てーぶるのID',1,3); ではだめってことでしょ?

回答No.9

しつもん。 「れつをけす」がただしいの? 「とくていのせるをかくす」がただしいの? 「ひょうのどこであれ、していしたIDのあるれつすべてをけす」? にほんごむずかしいからさぁ。ばぶ。

ikeike77
質問者

補足

すみません。スレを変えて画像で表示します。

回答No.8

おおきいゆめをかたられたら、どうしよう?とおもったけど。ばぶ。 function hide() {  var c = 0, o, e;  while (o = arguments[c++]) (e = document.getElementById(o)) && (e.style.visibility = 'hidden'); }

回答No.7

ぶちっ。 れいせいに×2>じぶん ikeike77さんへ ようぼうというか、仕様はほかにないのかなぁ~。ばぶぅ~ ゆめはおおきくかたっておいたほうがよいぞ!ばぶぅ。

ikeike77
質問者

補足

ごめんなさいm(__)m 回答No.3に補足説明したのですが、rowspan、colspan混在したテーブルで、 childNodesとかの知識もおぼろげで。。。 要はテーブル中の特定のIDを付けた列だけを非表示にしたいのです。

  • think49
  • ベストアンサー率59% (285/482)
回答No.6

babu_babooさんの方法が一番スマートですね。 tableの場合、childNodesを使わなくても rows, cells という便利なプロパティがあるようです。 Document Object Model/TABLE http://homepage3.nifty.com/aya_js/dom/dom03.htm # あとは、Firebugでいろいろコードをたたけば解決できるんじゃないでしょうか。

回答No.5

れんとう、ごめん。 colSpan には、0のときもあるらしいので、そのときは・・・ やっぱり while がみじかいじょ function test(tableID, sRow, eRow, vFlag) {  var t = document.getElementById(tableID);  var tr;  var cIdx;  var obj;  var disp = /*@if(@v<8) 'inline' @else@*/ 'table-cell' /*@end@*/;  var i = 0, j;    while (tr = t.rows[i++]) {   cIdx = j = 0;   while (obj = tr.cells[j++]) {    sRow <= cIdx && cIdx <= eRow && (obj.style.display = vFlag ? disp: 'none');    cIdx += obj.colSpan;   }  } }

回答No.4

ていせいします (@v<8) でした。

回答No.3

ひょうのせるには、.colSpanってのがあるじょ! それをかうんとしてはんだんしてる。 style.display は、tabel-cell と inline とがあるじょ めんどうなので rowSpan は、する~しちゃった ばぶぅ。 //@cc_on @set @v = @_jscript_version; function test(tableID, sRow, eRow, vFlag) {  var t = document.getElementById(tableID);  var rMax = t.rows.length;  var cMax;  var tr;  var cIdx;  var obj;  var disp = /*@if(@v>=8) 'inline' @else@*/ 'table-cell' /*@end@*/;    for (var i = 0; i < rMax; i++) {   tr = t.rows[i];   cMax = tr.cells.length;   cIdx = 0;   for (var j = 0; j < cMax; j++) {    obj = tr.cells[j];    if (sRow <= cIdx && cIdx <= eRow) {     obj.style.display = vFlag ? disp: 'none';    }    cIdx += obj.colSpan;   }  } } alert('消す'); test('tbl1', 2,3); alert('見せる'); test('tbl1', 2,3,true);

ikeike77
質問者

補足

申し訳ありません。皆様を混乱させてしまって・・・ やりたい事は、AAAの列だけ常に表示させておき、BBB(つまり3列分)を表示/非表示になる・・といった事です。 下のHTMLで、変数bbbには「3」が入っているのは確認できましたが、後がさっぱり続きません。 どうぞよろしくお願いいたします。 <html> <head> <script type="text/javascript"> <!-- function hide(idName) { var aaa = document.getElementById(idName).childNodes; var bbb = aaa[0].length; alert(bbb); //--> </script> </head> <body> <button onClick="hide('list1')">隠す</button> <table border="1" cellpadding="2" cellspacing="1"> <tr> <th rowspan="3">AAA</th> <th colspan="3" id="list1">BBB</th> </tr> <tr> <th width="120">BBB1</th> <th width="120">BBB2</th> <th width="120">BBB3</th> </tr> <tr> <th>BBB11</th> <th>BBB21</th> <th>BBB31</th> </tr> <tr> <td>aaa</td> <td>aaa1</td> <td>aaa2</td> <td>aaa3</td> </tr> <tr> <td>bbb</td> <td>bbb1</td> <td>bbb2</td> <td>bbb3</td> </tr> <tr> <td>ccc</td> <td>ccc1</td> <td>ccc2</td> <td>ccc3</td> </tr> </table> </body> </html>

  • think49
  • ベストアンサー率59% (285/482)
回答No.2

document.getElementById('tbl1').childNodes を取得して、childNodesを辿っていって3番目&4番目のtd要素ノードにstyle="display:none;"を与える。 という形になると思います。 TAG indexによく似た質問がありました。参考になるかもしれません。 掲示板/JavaScript質問板/javascript 列を非表示にしたい - TAG index Webサイト http://www.tagindex.com/cgi-lib/q4bbs/patio.cgi?mode=view&no=2249

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

colspanがあろうがなかろうが やることは同じよ。 消したい場合は対象のセルを全て、 表示したい場合も対象のセルを全て style.displayを書き換えるだけ。

関連するQ&A