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

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

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

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

876閲覧

テーブルから取得した要素で特定の文字列が全て入った列を取得したい

Miken_work

総合スコア34

JavaScript

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

検索

検索は、あるデータの集まりの中から 目的のデータを見つけ出すことです。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/03/09 05:07

編集2020/03/09 05:32

前提・実現したいこと

JavaScriptを使用し、HTMLで記述している下記のテーブルで
順不同で特定の文字を全て含む行を取得するのが目的です。
各tdにはクラスを設定してあります。

特定文字列:"あ","い","う"(配列)

列1列2列3

試したこと

indexOf()メソッドやfilter()メソッドを使用して取得を試みましたが結果うまくいきませんでした。

下記は最終的な現在のコードです。

JavaScript

1 for(let i=0;i<array.length;i++){ 2 tagName = array[i].getElementsByTagName('span'); 3 for(let a=0;a<tagName.length;a++){ 4 tagClass[a] = tagName[a].className; 5 } 6 let str_display = tagClass.filter((val) => { 7 for(var tagClass in this){ 8 if(tagClass === val) 9 return array; 10 } 11 },array); 12 }

どのような記述をすると該当の文字列がすべて含まれる列を取得できるのでしょうか?

###追記事項

HTML

1<thead> 2<tr class="headers"> 3<th class="colset colset-1">列1</th> 4<th class="colset colset-2">列2</th> 5<th class="colset colset-3">列3</th> 6</tr> 7</thead> 8<tbody> 9<tr class="rowset odd rowset-1"> 10<td class="colset colset-1"><span class="a">あ</span></td> 11<td class="colset colset-2"><span class="i">い</span></td> 12<td class="colset colset-3"><span class="u">う</span></td> 13</tr> 14<tr class="rowset odd rowset-1"> 15<td class="colset colset-1"><span class="a">あ</span></td> 16<td class="colset colset-2"><span class="i">い</span></td> 17<td class="colset colset-3"><span class="e">え</span></td> 18</tr> 19<tr class="rowset odd rowset-1"> 20<td class="colset colset-1"><span class="a">あ</span></td> 21<td class="colset colset-2"><span class="i">い</span></td> 22<td class="colset colset-3"><span class="u">う</span></td> 23</tr> 24<tr class="rowset odd rowset-1"> 25<td class="colset colset-1"><span class="a">あ</span></td> 26<td class="colset colset-2"><span class="u">い</span></td> 27<td class="colset colset-3"><span class="o">お</span></td> 28</tr> 29</tbody>

JavaScript

1 document.querySelectorAll(str).forEach(e => { 2 array.push(e.parentElement.parentElement); 3 });

strには特定文字列を格納させてあります。

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

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

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

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

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

yambejp

2020/03/09 05:15

html次第の処理なので、htmlを追記ください
kei344

2020/03/09 05:28

arrayの定義も追記してください。
Miken_work

2020/03/09 05:45

HTML・定義文の追記させて頂きました
guest

回答2

0

JavaScript

1const array = ['あ', 'い', 'う']; 2const result = Array.from(document.querySelectorAll('tbody tr')).filter(tr => { 3 return Array.from(tr.cells).every((cell, index) => cell.textContent === array[index]); 4}); 5console.log(result);

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/every

投稿2020/03/09 05:31

x_x

総合スコア13749

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

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

Miken_work

2020/03/09 05:46

ご回答ありがとうございます。 every()メソッドというのもあったのですね! 参考にしてみます!
guest

0

ベストアンサー

こんな感じでしょうか

投稿2020/03/09 05:57

yambejp

総合スコア116724

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

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

yambejp

2020/03/09 05:57

<table id="t1"> <thead> <tr class="headers"> <th class="colset colset-1">列1</th> <th class="colset colset-2">列2</th> <th class="colset colset-3">列3</th> </tr> </thead> <tbody> <tr class="rowset odd rowset-1"> <td class="colset colset-1"><span class="a">あ</span></td> <td class="colset colset-2"><span class="i">い</span></td> <td class="colset colset-3"><span class="u">う</span></td> </tr> <tr class="rowset odd rowset-1"> <td class="colset colset-1"><span class="a">あ</span></td> <td class="colset colset-2"><span class="i">い</span></td> <td class="colset colset-3"><span class="e">え</span></td> </tr> <tr class="rowset odd rowset-1"> <td class="colset colset-1"><span class="a">あ</span></td> <td class="colset colset-2"><span class="i">い</span></td> <td class="colset colset-3"><span class="u">う</span></td> </tr> <tr class="rowset odd rowset-1"> <td class="colset colset-1"><span class="a">あ</span></td> <td class="colset colset-2"><span class="u">い</span></td> <td class="colset colset-3"><span class="o">お</span></td> </tr> </tbody> </table>
yambejp

2020/03/09 06:49 編集

<style> tr.active td{ color:red; } </style> <script> var a=["あ","い","う"]; /* var b=[]; // 不要 */ window.addEventListener('DOMContentLoaded', ()=>{ [...document.querySelectorAll('#t1 tbody tr')].forEach(x=>{ var list=[...x.querySelectorAll('td span')].map(y=>{ return y.textContent; }); x.classList.toggle('active',a.every(x=>list.indexOf(x)>-1)); }); }); </script>
Miken_work

2020/03/09 06:19

ご回答ありがとうございます。 2点不明点がございます。 1点目 var b=[];で定義されているのですがこちらはどこかで使用されているのでしょうか? 2点目 [...document~~] [...x.querySlectorAll~] 上記二か所で使用されている[... ~ ]なのですが 調べても出てこずでわからない状態です。 こちらはどのような意味があるのでしょうか? 差し支えなければ教えてください。
yambejp

2020/03/09 06:50 編集

bは最初つかう予定で書いていたのですがいらなかったですね 削除します 2重のループは、外側がtrごとに処理をすることを示していて 内側はtdのspanの中身を配列でうける処理です
Miken_work

2020/03/09 08:24

回答ありがとうございます。 参考にして実行してみます。
Miken_work

2020/03/10 06:56

回答いただいたコード内容を調べながら反映していたため時間が少し経ってしまいました。 無事yambejp様のコードを使用して理想の状態にできました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問