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

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

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

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

JavaScript

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

Q&A

解決済

2回答

979閲覧

JS getElementByIdで下の行に書いたinnerHTMLのタグのidを取得できてるのは何故か?

fuyukixxx

総合スコア26

HTML5

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

JavaScript

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

0グッド

0クリップ

投稿2021/02/22 12:06

ファイル操作のポートフォリオを作っているものです。
疑問に思ったことがあったので投稿しました。

定数の部分でgetElementByIdの'sample'と'sampleCurrentTime'が下の行に存在する。かつonloadされてからじゃないと生成されないのになぜ要素を取得することができるのか謎です。エラーがでるイメージですが、そのidは存在しませんよと。
このもやもやを解決したいです。回答お待ちしてます。

JS

1コード 2const sound = document.getElementById('sound'); 3const audition = document.getElementById('audition'); 4const currentTime = document.getElementById('currentTime'); 5const elementReference = document.getElementById('sample'); 6const sampleCurrentTime = document.getElementById('sampleCurrentTime'); 7 8const fileTitle = () => { 9 const files = sound.files; 10 const reader = new FileReader(); 11 const audio = new FileReader(); 12 const url = reader.readAsDataURL(files[0]); 13 14 reader.onload = () => { 15 dataUrl = reader.result; 16 document.getElementById('sample').remove(); 17 audition.innerHTML = '<audio src="' + dataUrl + '"controls id="sample"></audio>'; 18 currentTime.innerHTML = '<input type="range" value="0" id="sampleCurrentTime" min="0" step="1" onchange="setCurrentTime(this.value)">'; 19 }; 20 } 21 22sound.addEventListener('change', fileTitle);

HTML

1コード 2<input class="upload_hidden offset-9" type="file" id="sound" accept="audio/*" name="sound"> 3<div id="audition"><audio id="sample"></audio></div> 4<div id="currentTime"></div>

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

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

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

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

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

guest

回答2

0

エラーがでるイメージですが、そのidは存在しませんよと。

たとえ取得に失敗しても、document.getElementByIdエラーにはなりません。黙ってnullを返します。

投稿2021/02/22 12:28

maisumakun

総合スコア146018

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

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

fuyukixxx

2021/02/23 09:52

エラーになるイメージでしたが確かにnullですね。回答ありがとうございました。
guest

0

ベストアンサー

const elementReference = document.getElementById('sample');

const sampleCurrentTime = document.getElementById('sampleCurrentTime');

これは「実行結果を変数に受けているだけ」です。
エラーを出したければ何かしらで参照させてください。

js

1console.log(elementReference.id); 2//Uncaught TypeError: elementReference is null

仕様としても明記されています。

Document.getElementById()

返値
指定された ID に一致する DOM 要素オブジェクトを記述した Element オブジェクト、または**文書内に一致する要素がなければ null **です。

なのでエラーがでるイメージですが、そのidは存在しませんよと。のようにイメージではなく、仕様を確認してください。プログラムは書いたとおりに、その言語の仕様通りに動く。思った通りには動かない。

投稿2021/02/22 22:50

編集2021/02/22 22:52
m.ts10806

総合スコア80875

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

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

fuyukixxx

2021/02/23 09:51

エラーが出るイメージと思い込むことに、今後気をつけたいと思います。 頭の整理ができました。ありがとうございます。 デバックすることにも、もう少し意識します。
m.ts10806

2021/02/23 09:52

debugなのでデバックではなくデバッグです。 「メソッドの戻り値を確認する」癖をつけると良いかと思います。 「書いたとおりに動く」ということも忘れないようにしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問