[解決済み] nullのプロパティ 'getElementsByClassName' を読み取ることができません - "if" ステートメントを使用して強制的に読み取ることは可能ですか?
質問
私は明らかに全くの初心者です。私は2つのhtmlページを持っていて、両方とも同じJavaScriptファイルを呼び出しています。JSの機能は、順序なしリストから特定のリスト項目を非表示にすることです。片方のページには呼び出されているクラスがないので(そのdivはページに存在しない)、JSがその特定の要素がないことを見たとき、nullエラーを投げているのだと思いますが、それは私にとって理にかなっています。おそらく、"if" ステートメントを使用して、これを修正する方法はありますか?言い換えれば、このhtml要素が存在しない場合、とにかくこれを行う?
<script>
function opNotices() {
var list = document.getElementById("op-notices-1").getElementsByClassName("content")[0];
list.getElementsByTagName("li")[0].style.display = "none";
list.getElementsByTagName("li")[1].style.display = "none";
var list = document.getElementById("op-notices-2").getElementsByClassName("content")[0];
list.getElementsByTagName("li")[2].style.display = "none";
list.getElementsByTagName("li")[3].style.display = "none";
}
opNotices();
</script>
<html>
<div id="op-notices-2"><!--#include virtual="content.html" -->
</div>
</html>
content.htmlは。
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
<li>d</li>
<li>e</li>
<li>f</li>
</ul>
出力は
- a
- b
- c
- d
- e
- f
でも、cとdは隠したい。
どのように解決するのですか?
getElementsByClassName' of null"エラーはクラス名がないことを意味するのではなく、'getElementsByClassName'を実行しようとしたものが存在しないことを意味します。言い換えれば、あなたのコードは、クラス名で要素を検索しようとするのに十分な距離をとっていないのです。
具体的には、以下のような行になります。
var list = document.getElementById("op-notices-1").getElementsByClassName("content")[0];
は、次のようなステップを実行します。
-
変数名に格納されている値をすべて取得する
document
. 他に何も設定していないので、期待通りHTMLドキュメントが返ってきます。 -
ステップ1で取得した値から
getElementById
. このステップは、ステップ 1 の値がobject
(のようなプロパティの集合(すなわち{ foo: 1; bar: "2" }
). このためdocument
はオブジェクトなので、これは問題なく動作します。getElementById
. -
手順2で取得した値を引数で呼び出す
("op-notices-1")
. これは、ステップ 2 の値がfunction
. という結果を返します。null
(というIDを持つHTML要素が存在しないため)。#op-notices-1
). -
手順3で取得した値から、以下のプロパティを探します。
getElementsByClassName
. これは、ステップ 3 の値がobject
は、ステップ2のように そのため ではありません。 (それはnull
このスクリプト全体では、これ以降何も実行されません。
つまり、あなたの問題を解決するには、ステップ 3 と 4 の間で null をチェックする必要があるのです。このステップを挿入すると、"op-notices-1" を処理するコードは次のようになります。
var opNotices1 = document.getElementById("op-notices-1");
if (opNotices1 !== null) {
var list = opNotices1.getElementsByClassName("content")[0];
list.getElementsByTagName("li")[0].style.display = "none";
list.getElementsByTagName("li")[1].style.display = "none";
}
これは、単に "もし 'op-notices-1' がなければ、そのビットの残りをスキップしてください、というものです。
getElementById("op-notices-1")
戻る
null
は、単にフィルタリングを行うためのリストが存在しないことを意味します)。
関連
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】Babel NodeJS ES6: SyntaxError: 予期しないトークンのエクスポート
-
[解決済み】TypeError:res.jsonは関数ではありません。
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] 変数を使用してオブジェクトのプロパティに動的にアクセスする
-
[解決済み] クライアントにJavaScriptファイルを強制的に更新させるには?
-
[解決済み] HTMLの "no-js "クラスは何のためにあるのですか?
-
[解決済み] HTML5 CanvasとSVGとdivの比較
-
[解決済み] React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】Uncaught SyntaxError: JSON の位置 0 に予期しないトークン u があります。
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】このオブジェクトの "forEach "はなぜ関数でないのですか?
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー