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

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

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

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

HTML

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

Q&A

解決済

2回答

1760閲覧

関数でinnerHTMLを使えないようなエラーが出る。

Res

総合スコア184

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2019/05/31 10:42

###やりたいこと
ショートカットを作ろうと思って、id要素に出力するときのコードのショートカットを関数で実装しようと思って、以下のコードを書きました。

home.html

html

1<script> 2sethtml('sss','<a href="www">aaa<a>'); 3</script> 4<div id="sss"></div>

test.js

javascript

1function sethtml(id,html1){ 2 document.getElementById(id).innerHTML = html1; 3}

エラー

これでやってみたところsssにaaaが表示されず、コンソールを確認したところ次のようなエラーが出ました。

error

1Uncaught TypeError: Cannot set property 'innerHTML' of null 2 at sethtml (test.js:7) 3 at home.html:131

これは、MacのChromeで、バージョンは74.0.3729.169です。

わかる方いたらお願いします!!

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

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

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

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

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

guest

回答2

0

呼び出す順番の問題では?
ちなみにaの閉じタグがおかしかったので気をつけてください

javascript

1<script> 2window.addEventListener('DOMContentLoaded', function(e){ 3 sethtml('sss','<a href="www">aaa</a>'); 4}); 5function sethtml(id,html1){ 6 document.getElementById(id).innerHTML = html1; 7} 8</script> 9<div id="sss"></div> 10

投稿2019/05/31 10:46

yambejp

総合スコア114883

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

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

Res

2019/05/31 11:40

今モバイルなので試してみます。
think49

2019/06/01 02:02

> window.addEventListener('DOMContentLoaded', function(e){ 素朴な疑問ですが、window でメソッド呼び出しする理由は何でしょうか。 DOMContentLoaded は bubble するのでこれでも動きますが、window は document よりも発火タイミングが遅いので、理由が気になりました。
Res

2019/06/01 06:45

良い回答ですが、今回はライブラリーの様に簡単にやりたかったので、上の方を選びます。回答ありがとうございます!!
guest

0

ベストアンサー

sethtml()が実行された時点で<div id="sss"></div>がまだないので、document.getElementById(id)の結果がnullになります。

順番を入れ替えるとうまくいきます。

html

1<div id="sss"></div> 2<script> 3sethtml('sss','<a href="www">aaa<a>'); 4</script>

投稿2019/05/31 10:50

HAC

総合スコア118

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

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

HAC

2019/05/31 11:29

自分で書いておいてなんですが... こちらでも一応動きますが、yambejpさんのようにするのが正道です。あちらを採用してください。 `window.addEventListener('DOMContentLoaded', ... )`= HTMLタグが全解釈されたら動作、なので。
think49

2019/05/31 11:48

否定されたところなんですが、私ならこちらか、<script defer> を採用します。
HAC

2019/05/31 12:35

<script defer>を知りませんでした。勉強になります。 知識不足ゆえお聞きしますが、addEventListener('DOMContentLoaded')を採用しない理由はなんでしょうか?
think49

2019/06/01 01:56

> addEventListener('DOMContentLoaded')を採用しない理由はなんでしょうか? addEventListener は直接的要因ではなく、<script> の位置に問題があります。 script要素で宣言されたJavaScriptが実行されるまでHTMLパーサのパース処理が止まるパフォーマンス低下問題がある為、要素読み込みが必要なJavaScript処理は </body> 直前で定義する事にしています。 https://gist.github.com/think49/689d7d1e5c5fd0c5ca266e4c66b0b35e https://www.google.com/search?q=script+%28defer+%7C+async%29&oq=script+%28defer+%7C+async%29
Res

2019/06/01 06:47

今回は簡単に実装したかったのであなたを選びました。 あと、<script defer>も勉強になりました。 think49さん、HACさん、ありがとうございます!
HAC

2019/06/01 11:30

> think49さま 言わんとすることは理解できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問