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

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

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

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

Q&A

3回答

399閲覧

if文でのconsoleエラーが解消できない

nanashissss

総合スコア60

JavaScript

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

0グッド

1クリップ

投稿2022/06/15 00:54

編集2022/06/15 08:22

acces.htmlというページ以外で演算子を使用してacces.htmlでない場合以下の処理を行いたかったのですが、acces.htmlでconsoleエラーが表示されてしまい。解消したく、レクチャー頂ければ幸いです。

※querySelector取得してるclinic_infoという要素はacces.htmlは存在しません、。

window.addEventListener('DOMContentLoaded', () => { let url = location.pathname; if (url !== "acces.html") { const targetElement = document.querySelector('.clinic_info'); const elm = document.createElement('div'); elm.classList.add('js-mt70'); targetElement.insertAdjacentElement('beforebegin',elm); } //console.log(location.pathname) });

エラーメッセージ

utils.js:322 Uncaught TypeError: Cannot read properties of null (reading 'insertAdjacentElement')

内容追記します。
acces.html以外のページにはclinic_infoというクラス名のdivタグが存在します。
こちらにjsでcreateElementでdivタグを生成し、クラス名js-mt70を付与して、clinic_infoの上に出力させます。
※やりかたがイケてない等あると思いますが、こちらでは無視してください。

<div class="js-mt7"></div> <div class="clinic_info">text</div>

acces.htmlにはclinic_infoのdivタグが存在しないHTMLとなります。
acces.html以外はclinic_infoがあるので、acces.htmlでない場合はif文の処理を実行し、現在表示されてるコンソールエラーを解消したかったのです。
※恐らくclinic_infに対してinsertAdjacentElementしているのがエラーの原因かと思い。

※回答沢山ありがとうございました。
これから確認させていただきます。

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

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

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

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

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

yambejp

2022/06/15 00:59 編集

前回の質問を完全に無視ですか? その条件だとlocation.pathnameとは合致しませんが・・・ ご利用のOS・ブラウザの種類とバージョンを追記ください
maisumakun

2022/06/15 01:00

> ※querySelector取得してるclinic_infoという要素はacces.htmlは存在しません、。 この状況では、「どのように動作するように」したいのですか?
guest

回答3

0

エラーを消すだけならば、これでどうでしょうか。(IE11などでは動作しないです)
targetElement?.insertAdjacentElement?.('beforebegin',elm);

投稿2022/06/15 01:06

Lhankor_Mhy

総合スコア36074

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

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

Lhankor_Mhy

2022/06/15 04:12

低評価した人、「問題の趣旨に沿っていない」という気持ちもわかるけど、URL参照して別処理をさせるなんてアドホックすぎると思います。 そのうち「acces2.htmlにも同じ処理を」とかになって、メンテのコストが上がりそう。 ですので、targetElement が null なら処理を飛ばした方が無難じゃないかな、という回答ですのでよろしくお願いします。 (低評価を取り下げてほしい、という話ではないです)
nanashissss

2022/06/15 08:23

ご回答ありがとうございます。
guest

0

js

1 let url = location.pathname; 2 if (url !== "acces.html") {

location.pathname は必ず / で始まっているため、このコードではどんなURLでも条件は成り立ちます。

js

1 if (!url.endsWith("/access.html")) {

でしょう。

投稿2022/06/15 01:06

int32_t

総合スコア20832

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

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

nanashissss

2022/06/15 08:25

ありがとうございます。
guest

0

ご質問の内容についてはtargetElementが何もつかめなかったので
おそらくnullになっています。
つまりclinic_infoというクラスの付いたHTML要素が設定されていないのでしょう

動作確認用

javascript

1<script> 2window.addEventListener('DOMContentLoaded', () => { 3 let url = location.pathname; 4 if (url !== "acces.html") { 5 const targetElement = document.querySelector('.clinic_info'); 6 const elm = document.createElement('div'); 7 elm.classList.add('js-mt70'); 8 elm.textContent="test"; 9 targetElement.insertAdjacentElement('beforebegin',elm); 10 } 11}); 12</script> 13<div class="clinic_info">clinic_info</div>

投稿2022/06/15 01:02

編集2022/06/15 01:04
yambejp

総合スコア114769

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

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

nanashissss

2022/06/15 08:24

度々ご回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問