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

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

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

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

HTML

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

Q&A

解決済

2回答

2180閲覧

属性値を取得したいのですが…。

yamamoto_nara

総合スコア15

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2018/12/27 15:07

前提・実現したいこと

JavaScript初心者です。簡単なレベルでしたら申し訳ございません。

下記のJavaScript(DOMプログラミング)で属性idの値を取得するコードを作っています。
どうしても取得したい値が取得出来ません。
取得した「part3」の値をalert文で表示させたいです。

必須条件:
子ノードから親ノードへ下から上に辿ったやり方であること。

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

「part3」を表示させるはずが、「null」が表示されてしまいます。

該当のソースコード

JavaScript,

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>Insert title here</title> 6</head> 7<script> 8 function execute(){ 9 var start = document.getElementById("part1"); 10 alert(start.id); 11 var goal1 = start.parentNode.parentNode; 12 alert(goal1.getAttribute("id")); 13 14 // ★ここで躓いています★ 15 alert(goal1.parentNode.getAttribute("id")); 16 return; 17 } 18 19</script> 20<body> 21 <table id ="part3"> 22 <tr id = "part2"> 23 <td>要素1</td> 24 <td>要素2</td> 25 <td> 26 <input id ="part1" type="button" value="実行" onclick="execute()"> 27 </td> 28 </tr> 29 </table> 30</body> 31</html>

試したこと

・原因究明時、属性の値である「part1」「part2」を表示させることは成功しましたが、
どうしても「part3」を表示させることが出来ません。
・getElementByIdを用いて、直接<table id ="part3">の要素を取得した結果は、object HTML Table Elementで、
parentNodeを複数回使って親ノードへ辿った結果はobject HTML Table Section Elementでした。
→alert(document.getElementById("part3") == start.parentNode.parentNode.parentNode);
→falseが返される
・初心者で質問下手だと思いますが、子ノードから親ノードへ辿った上で、idの値である「part3」を取得する方法を御教示下さい。

よろしくお願いします。

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

closestなら段階をすっとばせるので楽かもしれません

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 document.querySelector('#part1').addEventListener('click',function(e){ 4 console.log(e.target.closest('table').getAttribute('id')); 5 }); 6}); 7</script> 8 9<table id ="part3"> 10<tr id = "part2"> 11<td>要素1</td> 12<td>要素2</td> 13<td> 14<input id ="part1" type="button" value="実行"> 15</td> 16</tr> 17</table>

投稿2018/12/28 00:34

yambejp

総合スコア114843

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

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

yamamoto_nara

2018/12/28 10:05

御教示下さり、ありがとうございます! 基本をマスターした後に、後学のために理解しておきます。 よろしくお願いします。
guest

0

ベストアンサー

tbodyが挿入されるからgoal1.parentNode.parentNode.getAttribute("id"))にすれば取得できます。

js

1 var start = document.getElementById("part1"); 2 console.log(start.id); 3 var goal1 = start.parentNode.parentNode; 4 console.log(goal1.getAttribute("id")); 5 6 console.log(goal1.parentNode); 7 console.log(goal1.parentNode.parentNode.getAttribute("id")); 8```**動くサンプル:**[https://jsfiddle.net/2be107tx/](https://jsfiddle.net/2be107tx/) 9 10--- 11 12【デバッグに大活躍! JavaScriptのconsole.logで値を表示しよう | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト】 13[https://www.sejuku.net/blog/27205](https://www.sejuku.net/blog/27205) 14 15【二章第八回 テーブルの操作 — JavaScript初級者から中級者になろう — uhyohyo.net】 16[https://uhyohyo.net/javascript/2_8.html](https://uhyohyo.net/javascript/2_8.html) 17> 詳しくはHTMLを勉強してほしいのですが、tableの中にはtbodyという要素があり、trはその中に入れます。このtbodyという要素は省略可能であり、まったく書かなくても暗黙のうちに存在すると見なされるのです。

投稿2018/12/27 15:17

編集2018/12/27 15:20
kei344

総合スコア69407

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

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

yamamoto_nara

2018/12/27 15:30 編集

素早い御対応、ありがとうございます! 取得に成功しました! 恥ずかしながら今回の調査で1時間以上要してしまいました。 本来ならばどのように調査すればもっと効率良くかつ 他の方のお時間を取らせずに進められたのでしょうか? 一刻も早く、独り立ち出来るようになりたいと考えています。
yamamoto_nara

2018/12/27 15:52

また、参考資料の御提供までありがとうございました!
kei344

2018/12/27 16:07

> どのように調査すれば ます、alertは文字列しか確認できないので console.log(デベロッパーツール)を使ってください。 「期待した値がどこまで取得できているか」を調べるだけでもわかることは多いです。 がんばってください!
yamamoto_nara

2018/12/28 10:09 編集

承知しました。 DOMの資料で自分の求めているものが見つからなかったので、 本当に助かりました! 御提供して下さった参考資料を基に勉強しておきます。 本件はこれにてクローズさせて頂きます。 色々と御教示下さり、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問