[15] [DFN[[CODE(JS)@en[[[document.all]]]]]] は、[[文書]]中のすべての[[要素]]を含む[[コレクション]]です。 この[[オブジェクト]]は [[IE4 DOM]] の一部であり、現在では[[廃止]]状態とされています [SRC[>>14]] が、 [[Webブラウザー]]が実装しなければならない [SRC[>>14]] 機能の一つとされており、 すべての [[Webブラウザー]]が対応しています。 * 仕様書 [REFS[ - [14] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) - [13] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2014-04-03 03:44:44 +09:00]] 版) ]REFS] * 定義 [16] [CODE(DOMi)@en[[[Document]]]] [[インターフェイス]]の [CODE(DOMa)@en[[[all]]]] [[属性]]は、 [CODE(DOMi)@en[[[HTMLAllCollection]]]] [[オブジェクト]]を返す[[読み取り専用]]の[[IDL属性]]です。 この[[オブジェクト]]は当該 [CODE(DOMi)@en[[[Document]]]] を[[根]]とし、 すべての[[要素]]に[[一致]]する[[フィルター]]を持つものでなければ[['''なりません''']]。 [SRC[>>14]] * JavaScript 束縛 [17] [CODE(JS)@en[[[document.all]]]] [[オブジェクト]]に [[JavaScript]] [CODE(JS)@en[[[ToBoolean()]]]] [[演算]]を適用すると、[[偽]]を返さなければ[['''なりません''']]。 [SRC[>>14]] [18] [CODE(JS)@en[[[document.all]]]] [[オブジェクト]]に [[JavaScript]] の [CODE(JS)@en[[[==]]]] や [CODE(JS)[[[!=]]]] の[[演算子]]を適用すると、[CODE(JS)@en[[[undefined]]]] や [CODE(JS)@en[[[null]]]] と同じように振る舞わなければ[['''なりません''']]。 [SRC[>>14]] ;; [19] [CODE(JS)[[[===]]]] や [CODE(JS)[[[!==]]]] に関しては、普通の[[オブジェクト]]と同じように振る舞います。 [20] [CODE(JS)@en[[[document.all]]]] [[オブジェクト]]に [[JavaScript]] の [CODE(JS)@en[[[typeof]]]] [[演算子]]を適用すると、[[文字列]] [CODE(JS)@en[[[undefined]]]] を返さなければ[['''なりません''']]。 [SRC[>>14]] [21] これらの要件は、通常の[[オブジェクト]]の動作とは異なりますが、歴史的経緯のために必要 [SRC[>>14]] とされています。 [22] かつて [CODE(JS)@en[[[document.all]]]] は [[IE]] のみが実装していたため、 [[IE]] であるかどうかの判別に用いられることがありました。すなわち、 [PRE(JS example code)[ if (document.all) { // for IE } else { // for non-IE } ]PRE] ... で [[IE]] 以外の[[近代的ブラウザー]]は後者が実行される必要がありました。一方で、 [[IE]] のみに対応していて [CODE(JS)@en[[[document.all]]]] が実装されていなければ動作しない [[Webサイト]]も存在していました。この両方のパターンに対応するため、 [CODE(JS)@en[[[document.all]]]] [[オブジェクト]]は条件式においては [CODE(JS)@en[[[undefined]]]] と同じように動作する実装がなされました。 現在では [[IE]] も[[近代的ブラウザー]]と [[HTML Standard]] に従っています。 * 歴史 [1] [CITE[DOMNodeInserted と DOMNodeRemoved に似た仕組みを IE でも使えるようにして、セレクタの実行結果をキャッシュする - uupaaの開発日記]] ([TIME[2008-12-27 13:51:49 +09:00]] 版) > -DOMNodeInserted, DOMNodeRemoved -- document.all.length でノード数を調べることで検出します。事前に作成されているコレクションを参照するため、かなり高速です。 -- このやり方では、挿入, 削除されたタイミングを動的に知ることはできません。 -- Firefoxの標準準拠モード以外なら、ほぼ全てのモダンブラウザで使えます。 [2] [[DSiブラウザ]]で [CODE(JS)@en[[[document.all]]]] は[[真]]になります・・・。 [3] [CITE[IRC logs: freenode / #whatwg / 20101115]] ( ([TIME[2010-11-20 21:48:00 +09:00]] 版)) [4] [CITE@en[Web Applications 1.0 r6900 Update HTMLAllCollection.item(DOMString) to act like namedItem.]] ( ([TIME[2012-01-18 08:02:00 +09:00]] 版)) [5] [CITE@en[RE: Make Microsoft follow the spec.]] ( ([[Chris Wilson]] 著, [TIME[2001-03-06 01:49:38 +09:00]] 版)) [6] [CITE@en[Web Applications 1.0 r7624 Clarify the document.all black magic.]] ( ([TIME[2012-12-31 13:57:00 +09:00]] 版)) [7] [CITE@en[Web Applications 1.0 r7798 Fix document.all since DOM changed out from under us... also, ack for previous checkin]] ( ([TIME[2013-04-10 06:48:00 +09:00]] 版)) [8] [CITE@en[Web Applications 1.0 r8469 Remove some parts of document.all that data shows have virtually no usage.]] ( ([TIME[2014-02-07 04:35:00 +09:00]] 版)) [9] [CITE@en[Re: twitter, document.all]] ( ([[Ms2ger]] 著, [TIME[2014-02-13 19:42:45 +09:00]] 版)) [10] [CITE@en[Web Applications 1.0 r8502 Restore document.all() legacycaller, for compat]] ( ([TIME[2014-02-22 07:12:00 +09:00]] 版)) [11] [CITE@en[Web Applications 1.0 r8469 Remove some parts of document.all that data shows have virtually no usage.]] ( ([TIME[2014-02-07 04:35:00 +09:00]] 版)) [12] [CITE@en[Web Applications 1.0 r8010 Make the empty string no longer be a possible index for most objects that can be indexed by name.]] ( ([TIME[2013-07-03 06:45:00 +09:00]] 版))