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

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

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

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

Q&A

解決済

2回答

703閲覧

javascript でテーブルの行の表示と非表示

hiro114

総合スコア13

JavaScript

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

0グッド

1クリップ

投稿2021/11/02 09:20

javascript ほぼ未経験です。
javascript と select タグを使い条件に合うものだけ表示しようとしております
option タグの値と、テーブルの tr タグが同じものを表示し、「全件」を選ぶと value="all" でまた、全件表示できるようにしようとしておりますがうまくいきません
class の指定の仕方が間違っているのでしょうか? 
アドバイスよろしくお願いします

html

1<select id="list" class="container text-center"> 2 <option value="all">----- 全件 -----</option> 3 <option value="books">「ブックス」のみ表示</option> 4 <option value="douga">「動画」のみ表示</option> 5   <option value="game">「ゲーム」のみ表示</option> 6</select> 7<input onclick="print_row()" type="button" value="表示"> 8 9<table id="table"> 10 <tbody> 11 <tr> 12 <th>順位</th><th>タイトル</th><th>料金</th><th>メーカー</th> 13 </tr> 14 <tr class="books all"></tr> 15 <tr class="douga all"></tr> 16 <tr class="game all"></tr> 17 </tbody> 18</table>

javascript

1function print_row(){ 2 var List = document.getElementById("list"); 3 index_num = List.selectedIndex; 4 optVal = List.options[index_num].value; 5 6 var Row = document.getElementsByClassName(optVal); 7 Row.style.display=(Row.style.display == 'none')?"":"none"; 8}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

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

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

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

guest

回答2

0

js

1 var Row = document.getElementsByClassName(optVal); 2 Row.style.display=(Row.style.display == 'none')?"":"none";

getElementsByClassName()の戻り値は Element ではなく HTMLCollection、という問題はさておき、ロジックがおかしいですよね。

  • all の場合、すべての tr を表示状態にする
  • それ以外の場合、optVal と同じクラスを持っている tr は表示状態、持っていないなら非表示状態にする

ということで、Row.style.display の現在値を調べる必要はないはずです。

どちらの場合でもすべての tr を処理する必要があるので、getElementsByClassName() のパラメータは常に "all" でよいのではないでしょうか。

投稿2021/11/02 09:36

int32_t

総合スコア21020

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

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

hiro114

2021/11/02 10:18

ありがとうございました
guest

0

ベストアンサー

ん〜。print_row()をこんなのにしてみるとどう?

javascript

1function print_row() { 2 const clazz = document.getElementById("list").value; 3 document.querySelectorAll('tr').forEach(row => { 4 row.style.display = row.classList.contains(clazz) ? '' : 'none'; 5 }); 6} 7

投稿2021/11/02 09:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hiro114

2021/11/02 10:18

これを機に少しずつJSを勉強させていただきます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問