質問: a.getElementsByClassName('p'); ``` を読み込む場合、すべてのページに#id要素が存在するとは限りません。そのような場合は、`b` に代入する前に `null` かどうかをチェックしてから代入するといったような方法が普通でしょうか?普通はどのような方法が使われますか?
回答: ### クラス名とタグ名の区別 「`p` というクラスが設定されている要素」と「`p` 要素」は異なります。 前者であれば、質問のコードのように、`getElementsByClassName` で検索して大丈夫です。 しかし後者の「`p` 要素」というと通常はタグ名 `p` で作成される要素を指しますので、これを検索するには`getElementsByTagName` を使います。 `querySelectorAll` を使う場合、前者に対応するセレクタは `#id .p` になります。 既存の回答で提案されている `#id p` は後者に対応するセレクタです。 やろうとしている事がどちらなのか確認し使い分けて下さい。 ### `null` の問題 `getElementById` が `null` を返すことは既存の回答にありますね。 `querySelectorAll` でスマートに書けるというのはその通りだと思いますが、置き換えられない場合もありますし、チェックする形でもよいのではないでしょうか。 ``` // 質問に合わせ、id 名に "id"、クラス名に "p"、宣言に var を使用します var a = document.getElementById("id"); var b = []; if (a) { b = a.getElementsByClassName("p"); } ``` 自分の管理外に変数 `a` を参照しているコードがあるなど、全部に `null` のチェックを追加できない場合は、`null` の代りに空の要素を代入しておく手もあります。 ``` var a = document.getElementById("id") || document.createElement("div"); var b = a.getElementsByClassName("p"); ```