[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]] 版) - [27] [CITE@en-US[DOM Standard]] ([TIME[2014-03-20 17:08:41 +09:00]] 版) ]REFS] * [CODE(DOMi)@en[Document]] オブジェクト [CODE(DOMa)@en[all]] 属性 (DOM) [16] [CODE(DOMi)@en[[[Document]]]] [[インターフェイス]]の [CODE(DOMa)@en[[[all]]]] [[属性]]は、 [CODE(DOMi)@en[[[HTMLAllCollection]]]] [[オブジェクト]]を返す[[読み取り専用]]の[[IDL属性]]です。 この[[オブジェクト]]は当該 [CODE(DOMi)@en[[[Document]]]] を[[根]]とし、 すべての[[要素]]に[[一致]]する[[フィルター]]を持つものでなければ[['''なりません''']]。 [SRC[>>14]] [37] 毎回同じオブジェクトを返します。 * [CODE(DOMi)@en[HTMLCollection]] インターフェイス (DOM) [23] [DFN[[CODE(DOMi)@en[[[HTMLAllCollection]]]]]] [[インターフェイス]]は [CODE(DOMi)@en[[[HTMLCollection]]]] [[インターフェイス]]を[[継承]]しており [SRC[>>13]]、[[文書環境]]で [[JavaScriptに晒され]]ています。 [38] この[[オブジェクト]]は[[生きて]]おり、[[DOM木]]に対する変更が即時反映されます。 ** メンバー [24] [CODE(DOMi)@en[[[HTMLAllCollection]]]] には、[[継承]]するものも含めて次のメンバーがあります。 [FIG[ - [CODE(DOMm)@en[[[item]]]] - [CODE(DOMa)@en[[[length]]]] - [CODE(DOMm)@en[[[namedItem]]]] - [[supported property indices]] - [[supported property names]] - [[legacy caller]] ]FIG] [25] 数値インデックス ([[配列]]風アクセス) は、 [CODE(DOMm)@en[[[item]]]] [[メソッド]]の呼び出しと等価です [SRC[SRC[>>27]]。 [CODE(DOMm)@en[[[item]]]] [[メソッド]]は[[数値]]を引数として呼び出すと[[コレクション]]中の[[木順]]で指定された位置の[[要素]]を返します [SRC[>>27]]。 [26] 名前インデックス ([[オブジェクト]]風アクセス) と [[legacy caller]] ([[メソッド]]としての実行) は、 [CODE(DOMm)@en[[[namedItem]]]] [[メソッド]]の呼び出しと等価です [SRC[>>13]]。 [CODE(DOMm)@en[[[item]]]] [[メソッド]]を[[文字列]]引数で呼び出した場合もこちらと等価です [SRC[>>13]]。 [CODE(DOMm)@en[[[namedItem]]]] [[メソッド]]は[[コレクション]]中で指定された名前の[[要素]]を返します [SRC[>>13]]。 [29] [CODE(DOMm)@en[[[namedItem]]]] [[メソッド]]の引数が[[空文字列]]の時は、 [CODE(IDL)@en[[[null]]]] を返さなければ[['''なりません''']] [SRC[>>13]]。 [30] [CODE(DOMm)@en[[[namedItem]]]] [[メソッド]]の引数で指定された[[要素]]が複数ある時は、 当該 [CODE(DOMi)@en[[[HTMLAllCollection]]]] を更に指定された名前で絞り込んだ [CODE(DOMi)@en[[[HTMLCollectoon]]]] [[オブジェクト]]を返さなければ[['''なりません''']]。 [SRC[>>13]] ;; [31] 返されるのは [CODE(DOMi)@en[[[HTMLAllCollection]]]] ではありません。 ;; [32] 同じ名前の引数に対して同じオブジェクトを返さなければならないという規定は無いようです。 * 要素の名前 [33] [CODE(DOMi)@en[[[HTMLAllCollection]]]] における[[要素]]の[[名前]]とは、 [CODE(HTMLa)@en[[[name]]]] [[属性値]]と [[ID]] のことをいいます。 [34] ただし [CODE(HTMLa)@en[[[name]]]] [[属性]]が用いられるのは [DFN[[RUBYB[[[「all」名前付き要素]]]@en["all"-named elements]]]]に限られます。 「all」名前付き要素とは、 [[HTML]] の [FIG[ - [CODE(HTMLe)@en[[[a]]]] - [CODE(HTMLe)@en[[[applet]]]] - [CODE(HTMLe)@en[[[button]]]] - [CODE(HTMLe)@en[[[embed]]]] - [CODE(HTMLe)@en[[[form]]]] - [CODE(HTMLe)@en[[[frame]]]] - [CODE(HTMLe)@en[[[frameset]]]] - [CODE(HTMLe)@en[[[iframe]]]] - [CODE(HTMLe)@en[[[img]]]] - [CODE(HTMLe)@en[[[input]]]] - [CODE(HTMLe)@en[[[map]]]] - [CODE(HTMLe)@en[[[meta]]]] - [CODE(HTMLe)@en[[[object]]]] - [CODE(HTMLe)@en[[[select]]]] - [CODE(HTMLe)@en[[[textarea]]]] ]FIG] ... です [SRC[>>13]]。 ;; [40] このリストは[[ブラウザー]]によって相違がありますが、 [[HTML Standard]] は広めにとっているようです。 コメントに「keygen?」ともあります [SRC[>>39]]。 [36] ただし[[空文字列]]は名前とはみなされません。 [35] [[supported property names]] においては、[[木順]]で、重複する場合は最初の方が採用されます。 [CODE(HTMLa)@en[[[id]]]] と [CODE(HTMLa)@en[[[name]]]] がある[[要素]]があれば [CODE(HTMLa)@en[[[id]]]] が先に現れたと考えます。 [SRC[>>13]] * 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]] に従っています。 [28] これらは [CODE(DOMi)@en[[[HTMLAllCollection]]]] ではなく [CODE(JS)@en[[[document.all]]]] について要求されているようですが、 [CODE(JS)@en[[[document.all]]]] 以外で [CODE(DOMi)@en[[[HTMLAllCollection]]]] は使われていないので、実質的にそれと同じです。 * 歴史 [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]] 版)) [39] [CITE@en[Web Applications 1.0 r8501 Update the list of elements that support name='' attributes for the purposes of document.all (mostly using the IE/Firefox lists, which are nearly identical, and a superset of Safari/Chrome)]] ( ([TIME[2014-02-22 07:09:00 +09:00]] 版))