7

この質問は長い間私を悩ませてきました。ばかげた質問でしたら申し訳ありません。

前に、クラス名で要素を取得できることを知っていました

document.body.getElementsByClassName("foo");

そして、私はとても怠け者だったので、コードをコピーして他の部分に貼り付けただけです

document.body.getElementById("bar");

うまくいかないことが偶然わかりました。私はテストし、それは言う

TypeError: オブジェクト #<HTMLBodyElement> にはメソッド 'getElementById' がありません

では、なぜgetElementsByClassNameandgetElementsByTagNameおよびこれらすべての同様のメソッドがあるのに、 no しかないのgetElementByIdでしょうか?

typeof document === typeof document.body   //true

それらのタイプは同じなので、同じものを持つ必要があります。しかし、ここではそうではないようです。

4

4 に答える 4

5

同じクラス名を持つ複数の要素を持つことができるため、検索を絞り込んで特定のノードから開始することは理にかなっています。

一意である必要があるため、id では意味がありません。

idには 1 つしか持てません。これが のメソッドであるdocument理由です。getElementByIddocument

例:

<body>
    <div id="start">
        <span class="a">
    </div>
    <div class="a">
    </div>
</body>

aノードからクラスの検索を開始する<div id="start">と、1 つの要素が得られますが
、最上位のノード ドキュメントから開始すると、2 つの要素で終了します。

typeof比較に関して:

typeof 1 == typeof 2 == "Number" // true
1 !== 2 // true.

typeofdocument値ではなく型のみをチェックし、document.body両方のオブジェクトですが、異なるオブジェクトです。

typeof document === typeof document.body === typeof null === "object" // true
document === document.body // false!!!

ご覧のとおり、同じ型nulldocument共有していますが、同じメソッドを持っていますか? いいえ

于 2012-06-27T22:03:59.697 に答える
4

ID はドキュメント全体に固有であるため、ドキュメントの子ノードに範囲を限定しても意味がありません。

クラス名は一意ではなく、別の要素の下にクラス名を持つ要素を見つけるのに適したユース ケースがあります。

body.getElementsByClassName('foo')クラス名が「foo」であるが本体に含まれている要素を取得します。

document.getElementsByClassName('foo')を含む、ドキュメント全体でクラス名が「foo」のすべての要素を取得します<head>

于 2012-06-27T22:04:10.740 に答える
1

typeof documenttypeof document.bodyは同じなので、両方とも同じですobject。型は、オブジェクトに関して JS で考えているようには機能しません。いいえ、それらは同じではありません。同じ機能セットをサポートする必要がある特別な理由はありません。(同じプロトタイプを持つオブジェクトでさえ、同じ関数セットをサポートする必要はありませんが、それは別の問題です。) 呼び出すだけで機能しgetElementByIdますdocument

(「ドクター、ドクター、腕を頭の上にかざして8の字パターンですばやく回転させると痛い!」「うん?だからやめて」)

于 2012-06-27T22:05:10.320 に答える
0

あなたのtypeof例は、それらが同じものであることを比較していませんが、両方が返す同じ「タイプ」であることを比較していますobject:

Firebug コンソールからの出力:

>>> typeof document
"object"
>>> typeof document.body
"object"

の詳細については、次の URL を参照してくださいtypeof

https://developer.mozilla.org/en/JavaScript/Reference/Operators/typeof

于 2012-06-27T22:05:47.127 に答える