

私は、JavaScriptは既存のものを多少いじれても、0からプログラミングすることはできない、初級レベルです。恐縮ですがご教示下さい。
1つのページ上に、プルダウンメニューと長いテーブルがあります。
プルダウンメニューの選択肢は6つあり、どれかを選択すると、テーブルの中の一部の行(<tr>)だけが表示されるようにするのを、JavaScriptなどを使って単一のHTML上で実現することはできますでしょうか?
ちなみに、trは80行くらいあり、記載内容は6つにカテゴリ分けされています。
getElementsByIdを使う方法は見つけたのですが、同一idが複数存在してはいけないというルールで壁にぶつかっています…
例えば各trでのid設定を、内容のカテゴリに応じて
tr id="aXX"
tr id="bXX"
tr id="cXX"
tr id="dXX"
tr id="eXX"
tr id="fXX"
のように、「a~fのいずれか+2桁の通し番号」として全て固有な文字列にしたとして、セレクトメニューで例えば「a」と選んだら、idの中に文字列「a」を含むtr行だけを表示させる、ということは可能ですか?(idの一部の文字列から抽出対象を認識するということ)
head内に、抽出したいidを80個も(更に今後も毎週増える)書くのは避けたいのです。
お手数ですが、head内スクリプトとプルダウンメニューのタグを具体的にご教示頂けれると大変有難いです。
No.2ベストアンサー
- 回答日時:
たとえばこんな感じ
<script language=javascript>
function view(obj){
var v=obj.value;
var trs=document.getElementsByTagName("tr");
for(var i=0;i<trs.length;i++){
var patern="^"+v+"[0-9]{2}$";
if(trs[i].id.match(patern) || v=="") trs[i].style.display='block';
else trs[i].style.display='none';
}
}
</script>
<form>
<select onChange="view(this)">
<option value="">絞込</option>
<option value="a">a</option>
<option value="b">b</option>
<option value="c">c</option>
<option value="d">d</option>
<option value="e">e</option>
<option value="f">f</option>
</select>
</form>
<table border>
<tr id="a01"><td>a-1</td></tr>
<tr id="a02"><td>a-2</td></tr>
<tr id="b01"><td>b-1</td></tr>
<tr id="b02"><td>b-2</td></tr>
<tr id="c01"><td>c-1</td></tr>
<tr id="c02"><td>c-2</td></tr>
<tr id="d01"><td>d-1</td></tr>
<tr id="d02"><td>d-2</td></tr>
<tr id="e01"><td>e-1</td></tr>
<tr id="e02"><td>e-2</td></tr>
<tr id="f01"><td>f-1</td></tr>
<tr id="f02"><td>f-2</td></tr>
</table>
ただ、idでやるよりclassでやったほうが効率的な気がしますけどね
ありがとうございます!
頂いたものををベースに書き換えてみたら、何とか9割がたまでできました!
あとの1割とは、表の冒頭行にある項目名の部分(<tr><th>)が、選択を切り替えると見えなくなってしまうのです…
この行にはid指定はしていません。
どの選択肢にしても、冒頭行だけは常に表示できるようにする方法はありますでしょうか…?何度もすみませんm(__)m
ちなみに、実際に作っているものでは、各行のidは「アルファベット1文字+通し番号3桁」で、アルファベットに限らず通し番号になっています(従って番号は080まで存在します)。
スクリプトの{2}は{3}に変えてみました。
No.6
- 回答日時:
こんにちは
他の方の回答を使用して答えるのは横取りしているようで忍びないのですが・・・
9割方完成されてるとのことなのでNo.2様の回答から
iは先頭から0から始まりますのでその<th>がある<tr>のところの場所のdisplayをblockにしてやればいいです
例えば
<table>
<tr><th>内容</th></tr>
<tr id="a01"><td>a-1</td></tr>
(省略)
<tr id="d02"><td>d-2</td></tr>
<tr><th>内容2</th></tr>
<tr id="e01"><td>e-1</td></tr>
(省略)
となってるとしたら<th>があるところは0番目と9番目になりますので
function view(obj)内の
else trs[i].style.display='none'; の後ろに
trs[0].style.display = "block";
trs[9].style.display = "block";
とつければ表示できます
No.5
- 回答日時:
グループでまとめられなかったんですね。
それでは私も2さんが提案していたclassを利用したほうが何かと都合がいいような気がします。
ついでにテーブルのヘッダの問題もtheadで括る事で解決しています。
(あくまでテーブル先頭にあるものとした場合、テーブルないのあっちこっちにthがあるならもうちょっと考えないと)
<html>
<head>
<script type="text/javascript">
<!--
function tbView(SEL) {
var list = document.getElementById('table01').tBodies[0].getElementsByTagName('tr');
if(SEL.options[SEL.selectedIndex].value=='all'){
for(var i=0;i<list.length;i++)
list[i].style.display = '';
return;
}
for(var i=1;i<SEL.options.length;i++){
for(var i=0;i<list.length;i++) {
list[i].style.display =
(list[i].className.indexOf(SEL.options[SEL.selectedIndex].value)>=0)?'':'none';
}
}
}
//-->
</script>
</head>
<body>
<select onchange="tbView(this)">
<option value="all">全て表示</option>
<option value="num">数字</option>
<option value="hira">ひらがな</option>
</select>
<table id="table01">
<thead><tr><th>ヘッダ</th></tr></thead>
<tbody>
<tr class="hira"><td>あああ</td></tr>
<tr class="num"><td>000</td></tr>
<tr class="alpha"><td>aaa</td></tr>
<tr class="hira num"><td>お001</td></tr>
</tbody>
</table>
</body>
</html>
たびたびご親切に本当にありがとうございます。
ですが、既に作成したスクリプトに追加する形でお教え頂いたスクリプトも書くことになるのか、既存のスクリプトは使えなくなるのか、私の知識では理解できませんでした…
かなり高度なテクのようで…申し訳ありません。
No.4
- 回答日時:
#3です。
全部表示がなかったんでちょっと改良。
<html>
<head>
<script type="text/javascript">
<!--
function tbView(SEL) {
if(SEL.options[SEL.selectedIndex].value=='all'){
var list = document.getElementById('table01').getElementsByTagName('tbody');
for(var i=0;i<list.length;i++)
list[i].style.display = '';
return;
}
for(var i=1;i<SEL.options.length;i++){
document.getElementById(SEL.options[i].value).style.display =
(SEL.options[i].selected)?'':'none';
}
}
//-->
</script>
</head>
<body>
<select onchange="tbView(this)">
<option value="all">全て表示</option>
<option value="a">グループ1</option>
<option value="b">グループ2</option>
</select>
<table id="table01">
<tbody id="a">
<tr><td>あああ</td></tr>
<tr><td>いいい</td></tr>
</tobdy>
<tbody id="b">
<tr><td>ううう</td></tr>
<tr><td>えええ</td></tr>
</tobdy>
</table>
</body>
</html>
steel_grayさんありがとうございます。
ただ、残念ながらtrをカテゴリ毎に固めて並べることは、コンテンツの性質上できないので、tbodyでまとめるのは難しいのです。
でも勉強になります。ありがとうございました!!!
No.3
- 回答日時:
trがいくつかのグループに分かれているなら、
<tbody>でグループ化するといいかと思います。
以下、適当ですがサンプル。
<html>
<head>
<script type="text/javascript">
<!--
function tbView(SEL) {
for(var i=0;i<SEL.options.length;i++){
document.getElementById(SEL.options[i].value).style.display =
(SEL.options[i].selected)?'':'none';
}
}
//-->
</script>
</head>
<body>
<select onchange="tbView(this)">
<option value="a">グループ1</option>
<option value="b">グループ2</option>
</select>
<table>
<tbody id="a">
<tr><td>あああ</td></tr>
<tr><td>いいい</td></tr>
</tobdy>
<tbody id="b">
<tr><td>ううう</td></tr>
<tr><td>えええ</td></tr>
</tobdy>
</table>
</body>
</html>
No.1
- 回答日時:
selectの選択反応は onChange によって検知し
trは style="display:none" によって隠匿できるのでそれを操作する事によって可視不可視を制御できる
http://www.tohoho-web.com/js/onevent.htm#onChange
http://www.tohoho-web.com/css/reference.htm#disp …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- HTML・CSS 【CSS】:hasで可能? imgを含むtr要素を選択したい 1 2022/11/17 14:36
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
- 数学 2*2の行列に対して固有値の最大実部を与えるkの値を求めたい 3 2022/11/08 16:26
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript セレクトを全て選択されていないと、文字によるエラーメッセージを表示させるコードを調べています 2 2023/06/22 15:48
- Visual Basic(VBA) excelVBAについて。 5 2022/11/27 18:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ハイパーリンクを別ウインドウ...
-
至急!GetElementById でtdの...
-
iframeの内のTable(rowspan有り...
-
特定<table>内の<td>の色を変える
-
テーブルの項目の値取得
-
ビンゴゲームの作成
-
CSV形式の表の内容をHTMLファイ...
-
JavaScriptで特定のtdタグにcla...
-
JavaScript チェックボックスで...
-
jQueryでクリックされたテーブ...
-
子要素でない部分がクリックさ...
-
CSVデータをツリー表示させたい
-
子の要素へアクセス
-
特定の文字列を挿入
-
テーブルの最後の行であるか判...
-
javascriptで質問です。 displa...
-
テーブル内に表示されている数...
-
一覧から選択した行の行番号を...
-
クリックされた罫表セルの行番...
-
テーブルのセル数取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
ハイパーリンクを別ウインドウ...
-
プルダウンで選択すると、DBの...
-
JavaScriptで特定のtdタグにcla...
-
至急!GetElementById でtdの...
-
一覧から選択した行の行番号を...
-
クリックされた罫表セルの行番...
-
tableの任意行にfocusをあてる
-
javascript クリックすると、あ...
-
チェックボックスにチェックが...
-
マウスをブラウザの外に出した...
-
ブルダウン選択でページの表示...
-
Excelで作ったhtmlファイルのサ...
-
スクロールバーの表示位置を変...
-
動的なtableの値を取得したい
-
ツールチップにテーブル左端列...
-
【UWSC】HTML内のある部分を抽...
-
別ページからOnclickでテーブル...
-
【JQuery】テーブルで行選択さ...
-
JSで、テーブルのある行のみ、...
おすすめ情報