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

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

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

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

Q&A

解決済

3回答

1529閲覧

JavaScript Element.id の使い方

Anon_tmr

総合スコア23

JavaScript

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

0グッド

1クリップ

投稿2018/01/16 01:56

こんにちは。現在JavaScriptを使用して開発を行って半年ほどの者です。
タイトルの件でわからない部分があり、ご教授をお願いしたいと思っております。

以下が該当のコードです。

JavaScript

1//職人情報のテーブルリストを取得 2var div_memberList = document.querySelectorAll("div.member_area"); 3 4 //指定されたグループの職人情報以外は非表示にする 5 for (var i = 0;i < div_memberList.length;i++) { 6 var table_memberList = div_memberList[i].children; 7 var table_id = table_memberList.id; 8 9 if (table_memberList.id != "table_" + groupId) { 10 div_memberList[i].remove(); 11 } 12 }

HTMLの該当コードはこの部分です

HTML

1<div class="member_area"> 2  <table id="table_<%= focusGroup.getId() %>" class="member_list table_hidden" > 3 <tr> 4 <th> 5 <% if(target.equals("without")){ %> 6 <button type="button" onclick="openAddWorkerWinodw('insert_window', <%= mCount %>)"> 7 職人を追加 8 </button> 9 <% } %> 10 </th> 11 <th id="name">名前</th> 12 <th id="price">単価</th> 13 <%= target.equals("without") ? "<th id='main_payment'>決済</th>" : "" %> 14 <%= target.equals("only") ? "<th id='delete_date'>削除日</th>" : "" %> 15 </tr> 16 17 <%-- 各メンバーの名前、単価 --%> 18 <% ArrayList<Worker> members = focusGroup.getAllMember(); 19 for(int j = 0; j < members.size(); j++){ 20 Worker focusMember = members.get(j); 21 22 //非表示日が決まっている場合は名前を赤で表示、非表示日が1か月以内なら行を赤く表示 23 String deleteDateStyle = ""; 24

この<div class="member_area">は複数あります。そのそれぞれに<table id="table_<%= focusGroup.getId() %>" class="member_list table_hidden" >
を記述しています。このテーブル以外の要素は<div class="member_area">内にはありません。

このテーブルタグのIDをJavaScriptで取得したいのですが取得できずにいます。
どの部分の記述が間違っているのかご教授をお願いしたいと思っております。
よろしくお願いいたします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

JavaScript側が提示部分だけであれば、groupIdが定義されていません。あと、childrenHTMLCollectionを返します。

js

1var div_memberList = document.querySelectorAll("div.member_area"); 2var groupId = 5; 3 4//指定されたグループの職人情報以外は非表示にする 5for (var i = 0;i < div_memberList.length;i++) { 6 var table_memberList = div_memberList[i].children; 7 var table_id = table_memberList[0].id;//childrenはHTMLCollectionなので0番目 8 if (table_id != "table_" + groupId) { 9 div_memberList[i].remove(); 10 } 11} 12```**動くサンプル:**[https://jsfiddle.net/choxyh8b/](https://jsfiddle.net/choxyh8b/)

投稿2018/01/16 02:19

kei344

総合スコア69407

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

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

Anon_tmr

2018/01/17 07:14

ご回答ありがとうございます。 私の知識不足でchildrenはHTMLCollectionを返すという事を認識していませんでした。 勉強します。ご教授ありがとうございました。 動くサンプルまで用意していただきお手数おかけしました。 ありがとうございました。
guest

0

コードから察するに<div class="member_area">一つにtable一つ、という感じでしょうか?

でしたら、

js

1var table_memberList = div_memberList[i].children;

ではなく、

js

1var table_memberList = div_memberList[i].getElementsByTagName("table")[0];

または

js

1var table_memberList = div_memberList[i].querySelector("table");

とするとHTMLCollectionではなくDOM要素一つが返されるのでうまく行くと思います。

それとhtmlについてですがこれはJavaサーブレットか何かのテンプレートでしょうか?
でしたら、細かいことですが、タグにJavaも加えた方がいいような気がしました。

投稿2018/01/16 02:18

編集2018/01/16 02:21
namnium1125

総合スコア2043

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

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

Anon_tmr

2018/01/17 07:11

ご回答ありがとうございました。 div_memberList[i].childrenという書き方だとHTMLCollecionが取得されるというのを知識不足で 認識していませんでした。ご教授ありがとうございました。 本件は無事解決いたしました。 タグの書き方も気を付けます!
guest

0

member_areaはdivなので、tableを取得したいなら、

JavaScript

1document.querySelectorAll('.member_list');

ではないでしょうか?
より厳密に次のように書いてもいいです。

JavaScript

1document.querySelectorAll('div.member_area > table.member_list.table_hidden');

-- 11:58 追記
コード例を追記しようと思いましたが、idがわかっているならループするまでもありません。

JavaScript

1var table = document.getElementById("table_" + groupId); 2if (table) { 3 table.parentNode.remove(); 4}

投稿2018/01/16 02:09

編集2018/01/16 02:59
x_x

総合スコア13749

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

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

Anon_tmr

2018/01/17 07:09

ご回答ありがとうございました! divを取得して、そこからtableを取得...だと回りくどいですね。 本件は無事解決いたしました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問