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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

JavaScript

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

Q&A

解決済

1回答

4199閲覧

Javascript:テーブル行をセレクトボックスでフィルターしたい。

jojo003

総合スコア14

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Symfony

Symfony はPHPで記述されたWebアプリケーションフレームワークです。よく利用するコーディングをテンプレーティングするなど、Webアプリケーション開発の効率化を目的として設計されています。

JavaScript

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

0グッド

0クリップ

投稿2018/03/29 13:03

編集2018/03/29 13:54

Symfony環境にて、HPを作っています。
画面上の一覧表でセレクトボックスを選ぶと選択した項目に該当する行以外が見えなくなる機能をjavascriptで実現したいと思っています。
しかしJavascriptのエラーが出てしまい、何か選択すると全行消えてしまいます。
console.logで変数の中身など調べたところ「table.rows[i].cells[5].firstChild.innerText」でうまく値を取得できていませんでした。
色々試してみたのですが解決策が見いだせません。

<td>の中身はsymfonyのcontrollerで生成した変数を入れ込んでいます。 当方、素人レベルなので説明が上手くなく恐縮なのですが、なにかアドバイスをいただけると助かります。 ``` ▼View▼ <div> <select id="types" onChange="searchTable();" > <option value=""></option> <option value="" selected="">選択してください</option>  {% for p in paginationModal %} <option value="{{ p.name }}" >{{ p.name }}</option>  {% endfor %} </select> </div> <table id="result"> <thead> <tr> <th>ID</th> <th>名称</th> <th>品番</th> <th>型番</th> <th>JAN</th> <th>メーカー</th> </tr> </thead> <tbody> {% for p in paginationModal %} <tr> <td> <div> {{ p.id }} </div> </td>     <td> <div> {{ p.name }} </div> </td> <td> <div> {{ p.partNumber }} </div> </td> <td> <div> {{ p.modelNumber }} </div> </td> <td> <div> {{ p.jan }} </div> </td> <td> <div> {{ p.maker }} </div> </td> </tr> {% endfor %} </tbody> ``` ``` ▼Javascript▼ <script type="text/javascript"> function searchTable(){ var selectedType = document.getElementById("types").value; var table = document.getElementById('result'); for( i = 1; i < table.rows.length; i++ ){ if( selectedType === '' || selectedType === table.rows[i].cells[5].firstChild.innerText ){ table.rows[i].style.display = ''; }else{ table.rows[i].style.display = 'none'; } } } </script> ```

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

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

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

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

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

guest

回答1

0

ベストアンサー

これ、落とし穴なんですけど、

table.rows[i].cells[5]がどこかというと、ここですが、

HTML

1 <td> 2 <div> 3 {{ p.maker }} 4 </div> 5 </td>

ここの firstChild は何かというと、

textノード

これ。この空白文字であるtextNodeなんです。textNodeにはinnerHTML属性は無いので、table.rows[i].cells[5].firstChild.innerText は必ず undefined になってしまうわけです。

Node.firstChild

ですから、例えば

HTML

1 <td><div>{{ p.maker }}</div></td>

こうして、<td /> の最初の要素を <div /> になるようにすると、ちゃんと動作します。

でも、HTMLが見にくくなるので、こうします。

javascript

1table.rows[i].cells[5].firstElementChild.innerText

firstElementChild はtextNodeを含まないので、<div /> が取得できるようになります。

Element.firstElementChild - 最初の子要素を取得する

####追記

で、例によって table.rows[i].cells[5].firstElementChild.innerText は空白文字もごっそり含みますので、比較する場合は

Javascript

1table.rows[i].cells[5].firstElementChild.innerText.trim()

にしてやる必要がありますね。

投稿2018/03/29 16:03

編集2018/03/29 16:19
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

jojo003

2018/03/30 05:33

教えていただいた内容で試してみたらちゃんと動きました!!ありがとうございます。 空白を見ていたとは… ちゃんと基本を勉強します。 大変助かりました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問