質問: 単純なことが原因なのかと思いますが、 getElementsByClassNameで取得範囲を絞ろうとすると思ったように値が戻ってきませんでした。 下記のようにして、ページ内のaタグを全て取得したところ、正常に表示されます。 これを必要な箇所だけとりたいと思い、getElementsByClassName(クラス名)を追加したのですが、 何も返ってこなくなってしまいました。 お手数ですがどこが間違っているのか教えていただけないでしょうか。 よろしくお願いいたします。 ### 正常に取得できるコード ``` ``` ### 取得できないコード ``` ```
回答: ### getElementsByClassName > > > ``` > var x = document.getElementsByClassName(クラス名).getElementsByTagName("a"); > ``` > > `getElementsByClassName` が返す値は `HTMLCollection` です。 HTMLCollection には `getElementsByTagName` は生えていませんので、そのコードはエラーになります。 getElementsByTagName は `Document.prototype.getElementsByTagName` もしくは `Element.prototype.getElementsByTagName` に存在しますので、対象が `document` オブジェクトもしくは要素ノードでなければ使用できません。 * 3.5. インタフェース Document - DOM Standard 日本語訳 * 3.9. インタフェース Element - DOM Standard 日本語訳 * 3.2.10.2. インタフェース HTMLCollection - DOM Standard 日本語訳 ### querySelectorAll Selectors API を使えば、目的の動作は達成できます。 ``` var x = document.querySelectorAll('.hoge a'); ``` Re: igaiga さん