実現したいこと
テーブル内で指定した値を含むレコードの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」の使い方がわからずエラーが出ています。
説明が下手で申し訳ありません。
不足するコードなどあれば追加しますのでご指摘ください。
よろしくお願いします。
※コンソール
回答1件
あなたの回答
tips
プレビュー