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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Q&A

解決済

1回答

759閲覧

テーブル内で、指定した値のみが含まれるデータを抽出したい

teddy1121

総合スコア44

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

0グッド

0クリップ

投稿2022/03/30 03:50

編集2022/03/30 05:27

実現したいこと

テーブル内で指定した値を含むレコードのIDだけを抽出したい。
テーブルにはIDなどの他、booleanで出欠席の情報があります。
ここで教えて頂いた方法で、チェックボックスを押すと該当のIDを抽出することはできています。
また、絞り込みを行ったレコードのID全件を抽出することもできています。
今回は「出席が〇(true)のレコードのIDのみを抽出」したいです。
イメージ説明

発生している問題・エラーメッセージ

エラーメッセージ

’9’がundefined

html

1①絞りこみたい値 2<select name="classview" id="class-select" class="classview"> 3 <option value="0">選択してください</option> 4 <option value="2">メイト</option> 5 <option value="3">中受</option> 6 <option value="4">新小英</option> 7 <option value="6">レプトン</option> 8 <option value="10">新総合</option> 9 <option value="30">S</option> 10 <option value="31">S1</option> 11 <option value="32">S2</option> 12 <option value="33">S3</option> 13 <option value="40">G</option> 14 <option value="41">G1</option> 15 <option value="42">G2</option> 16 <option value="43">G3</option> 17 <option value="75">個別</option> 18 <option value="80">一般</option> 19 <option value="91">中準</option> 20 <option value="100">SS</option> 21 <option value="101">S1<</option> 22 <option value="102">S2</option> 23 <option value="110">KK</option> 24 <option value="111">KK1</option> 25</select> 26②絞り込み対象 27<table id="table1" class="kjtable"> 28 <thead> 29 <tr id="table-date" class="center"> 30 <th id="tableID">ID</th> 31 <th id="table-name" width="200">氏名</th> 32 <th id="table-kana" width="150" cmanSortBtn>カナ</th> 33 <th id="table-sex" width="50">性別</th> 34 <th id="table-school">学校</th> 35 <th id="table-reg">登録</th> 36 <th id="table-kshaID" hidden>kshaID</th> 37 <th id="table-ageID" hidden>ageID</th> 38 <th id="table-classID" hidden>classID</th> 39 <th id="attend" class="center">出席</th> 40 <th id="attend-check">チェック</th> 41 </tr> 42 </thead> 43 </table>

js

1let table = document.getElementById("table1"); 2 //HTMLで作成しているテーブルの後ろにはMSAccessから読み込んでいる出席データがあります。 3    //cells[9]以降に出席データがありますが、セレクトボックスで指定した列のみ表示するようになっています。※今回は[9] 4 for (let i = 1; i < table.rows.length; i++) { 5 var zairow = table.rows[i].cells[8]; 6 var classrow = table.rows[i].cells[7]; 7 var agerow = table.rows[i].cells[6]; 8 var ksharow = table.rows[i].cells[5]; 9 var ShouJsel = table.rows[i].cells[9]; 10 var ShouJday = table.rows[i].cells[10]; 11 var ShouMsel = table.rows[i].cells[11]; 12 var ShouMday = table.rows[i].cells[12]; 13      classrow.style.display = "none"; 14 agerow.style.display = "none"; 15 ksharow.style.display = "none"; 16 } 17 18 var tblTbody = document.getElementById('table1') 19 for (let i = 1; i < tblTbody.rows.length; i++) { 20 var cells = tblTbody.rows[i].cells[7].innerText;//指定した列(クラスID)の取得 21 numCells = Number(cells) 22 numSelect_val = Number(" " + select_val + " ") 23 if (numCells === numSelect_val) { 24 } else { 25 $(tblTbody.rows[i]).hide(); 26 } 27 } 28 29//教えて頂いた、セレクトボックスの値で絞り込みをした後のレコードのIDを取得する部分 30 let table = document.getElementById('table1'); 31 for (let row of [...table.rows].filter(r => r.style.display != 'none').map(item => item.cells[0])) {//ここでjQueryでhideになっているIDを除く、絞り込み済みのID(画像上の8件)を取得しています。 32 for ( let x of [row].filter(t => t.cells[9]))//ここで8件の中から出席に〇がついているIDだけ抽出したいです。 33 console.log(x) 34 }

試したこと

画像のように絞り込めている状態のIDは取得できていることから、同じようにcells[9]をtrueでフィルタをかけてforで回せばいいのかと思いましたが「row」の使い方がわからずエラーが出ています。
説明が下手で申し訳ありません。
不足するコードなどあれば追加しますのでご指摘ください。
よろしくお願いします。
※コンソール
イメージ説明

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

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

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

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

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

yambejp

2022/03/30 03:57

同じような質問を連投していますが、結局何が解決して何が未解決なのでしょうか? HTMLの例示も不十分でイマイチ回答しづらいです
teddy1121

2022/03/30 04:13

ご指摘ありがとうございます。 一つの質問で複数お願いしてはいけないものだと思い連投になってしまいました。申し訳ありません。 やりたいこと ・①のセレクトボックスの値で②のテーブルの絞り込みをする→解決 ・それぞれのレコードにチェックボックスをつける→解決 ・チェックボックスにチェックを入れると出席部分にチェックが付く→解決 ・チェックが入ったレコードのIDを取得→解決 ・絞り込み後のIDのみ取得→解決 ・チェックの入ったIDのみ取得→今ここ このような状態です。 この後IDが取得できたらpythonにIDを飛ばしてMSAccessにIDを追加したいと思っています。 ただこの部分はpythonになるので別の質問でしようと思っていました。 半日~1日程度は色々ググりながら試行錯誤しているのですが、知識が乏しいため先に進まず質問させていただいています。 説明など不十分なところがありますがお力添えをいただけたら幸いです。
yambejp

2022/03/30 04:16

可能であればcodepenなどソースが実行できるサイトにアップされることをおすすめします
teddy1121

2022/03/30 04:32

ありがとうございます。 そちらも併せて勉強させていただきます。
Lhankor_Mhy

2022/03/30 04:45

「画像のように絞り込めている状態のIDは取得できている」とのことですが、その画像は貼り忘れですか?
Lhankor_Mhy

2022/03/30 04:50

また、cells[9]を参照しているようですが、ご提示のHTMLを見る限りでは、それは「出席」ではないように見えます。実際のHTMLと提示されているHTMLが異なるのですか?
teddy1121

2022/03/30 04:58

Lhankor_Mhyさん、いつもありがとうございます! 不手際が多く申し訳ありません。 画像を追加しました。 また、HTMLは順番が入れ替わっていたので正しいものに編集しました。 お手数をおかけしますがよろしくお願いします。
guest

回答1

0

ベストアンサー

試してないですが。

js

1[...table.rows].filter(r => r.style.display != 'none').flatMap( row => row.cells[9]==="〇" ? [row.cells[0]] : [] )

今度は試しました。

js

1 let table = document.getElementById('table1'); 2 console.log([...table.rows].filter(r => r.style.display != 'none').flatMap(row => row.cells[9].textContent === "〇" ? [row.cells[0].textContent] : []))

ついでだから、ひとつにまとめておこう。

js

1 let table = document.getElementById('table1'); 2 console.log([...table.rows].flatMap(row => row.cells[9].textContent === "〇" && row.style.display != 'none' ? [row.cells[0].textContent] : []))

投稿2022/03/30 04:54

編集2022/03/30 05:20
Lhankor_Mhy

総合スコア36087

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

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

teddy1121

2022/03/30 05:08

回答ありがとうございます。 試したところ、エラーはでませんがコンソールには何もでませんでした。 console.log(row)のしたにconsole.log("test")と書いてもそれも表示されないので、forの後が実行されていないような雰囲気です。
Lhankor_Mhy

2022/03/30 05:18

追記しました。 ところで、コメントを拝見すると、デバッグができないようですね。 ちょっとそれはどうかと思いますので、Devtools の使い方を覚えてはいかがでしょうか。 そうすれば、ここでした質問のほとんどは独力で解決できると思いますよ。
teddy1121

2022/03/30 05:32

追記頂いたコードを試すと「試したこと」部分に追加した画像のように出ます。 これは正しいでしょうか? Devtools…恥ずかしながら初めて聞きました。 調べてみると説明書きがいっぱいありますね! ステップアップしつつお恥ずかしい質問をしなくて済むように勉強します!
Lhankor_Mhy

2022/03/30 05:51

そうすると、単純な○ではないのかもしれないですね。trimしてみるといいかもです。
teddy1121

2022/03/30 06:07

できましたーーー! 〇の部分はboolean型を〇に置き換えていたので-1じゃないと駄目だったんですね… この部分説明が足らず申し訳ありませんでした。 ただ、先ほど教えて頂いたコードで-1は試していたのですがダメでした。 調べてみるとなぜか-1の前にスペースがあったので、「 -1」としたら抽出できました。 なぜスペースが入ってしまったのかわかりませんが、しっかり調べてみます。 毎回的確にアドバイスをいただけて本当に感謝しています。 Lhankor_Mhyさんの技術力に脱帽です! デバッグについても勉強します! また困ったときは質問させてください! ありがとうございました!
Lhankor_Mhy

2022/03/30 06:41

-1とはなんのことなのかわからないのですが、ひとまずご解決されてよかったです。
teddy1121

2022/03/30 06:54

MSAccessのテーブルでYes/No型のフィールドを作っていて、それを読み込むとtrueなら-1、falseなら0が表示されます。そのままだと見る人がわからないかと思い if (ShouMsel.textContent === " -1") { ShouMsel.textContent = "〇" } else { if (ShouMsel.textContent === " 0") {  ShouMsel.textContent = "-" } } このような形で〇と-に表示を変えています。 なぜスペースが入るのかまだわからないのですが最悪スペースを入れれば動くことが分かったので一歩前進です! ありがとうございました! ※フォローさせていただいたのでよかったらまたお助けください!
Lhankor_Mhy

2022/03/30 09:12

私にできることでしたら喜んで。 -1 の件は、〇に置き換える前に処理したかったという話なのですね。理解しました。
teddy1121

2022/03/30 09:17

説明下手ですみませんでした。 はい、よろしくお願い致します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問