- ベストアンサー
テーブルで複数行をまとめて非表示にしたい方法
- JavaScriptを使用して、テーブルで複数行をまとめて非表示にする方法について教えてください。
- 現在、質問者はgetElementsByClassName関数を使用してクラス名を指定して複数行を非表示にしようとしていますが、うまくいきません。
- 質問者はgetElementByID関数を使用して一行ずつ非表示にすることはできたそうですが、クラス名を指定してまとめて非表示にする方法がわからないようです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じでどう? <style> tr.hide{display:none;} tr.display{display:table-row !important;} </style> <!--[if IE]> <style> tr.display{display:block !important;} </style> <![endif]--> <script> function open_close_rowhide(obj){ var v=obj.innerHTML; var tr=document.getElementsByTagName("tr"); for(var i=0;i<tr.length;i++){ var cn=tr[i].className; if(cn.match(/(^| )hide(?= |$)/)){ if(cn.match(/(^| )display(?= |$)/) && v=="非表示"){ cn=cn.replace(/(^| )display(?= |$)/,''); }else if(!cn.match(/(^| )display(?= |$)/) && v=="表示"){ cn+=" display"; } tr[i].className=cn; } } obj.innerHTML=v=="表示"?"非表示":"表示"; return false; } </script> <a href="#" onClick="return open_close_rowhide(this);">表示</a> <table border> <tr><th>test</th></tr> <tr><td>1</td></tr> <tr class="hide"><td>2</td></tr> <tr><td>3</td></tr> <tr><td>4</td></tr> <tr class="hide display"><td>5</td></tr> <tr class="hide display aaa"><td>6</td></tr> </table>
その他の回答 (2)
- 神崎 渉瑠(@taloo)
- ベストアンサー率44% (1016/2280)
getElementsByClassNameを使用し、ループ処理で1つずつセットしてください。
お礼
回答ありがとうございます。 やっぱりループ処理を使わないとダメですか。 もっと勉強します。 ありがとうございました。
- kosukejlampnet
- ベストアンサー率44% (126/282)
リファレンスをしっかり読みましょう。 getElementsByClassなんてものは定義されていません。
お礼
回答ありがとうございます。 そもそも定義されていなかったのですか・・・。 もっと勉強します、ありがとうございました。
お礼
回答ありがとうございます。 まさにやりたかった挙動を完璧にしてくれました。 書きませんでしたが、最初は非表示にしておきたかったので、その点でも完璧です。 PHPからの出力でしたが、それも問題ありませんでした。 しかし、何回読んでもコードの意味が難しくて分からない・・・これを機にもっと勉強したいと思います。 どうもありがとうございました。