[5] [[オブジェクト]]が [DFN[[[live]]]] である ([DFN[[[生きている]]]])
とは、その操作の対象となるデータが [[DOM]]
の変化に伴い随時変化することをいいます。[DFN[[RUBYB[[[静的]]]@en[static]]]]であるとは、
[[live]] ではなく、特定の時点でのスナップショットを対象とすることをいいます。

* 仕様書

[REFS[
- [13] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-07-20 22:41:10 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#live>
- [3] [CITE@en-US[DOM Standard]] ([TIME[2014-06-23 14:49:32 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-collection-live>
- [4] [CITE@en-US[DOM Standard]] ([TIME[2014-06-23 14:49:32 +09:00]] 版) <http://dom.spec.whatwg.org/#concept-collection-static>
- [9] [CITE@en-US[DOM Standard]] ([TIME[2014-06-23 14:49:32 +09:00]] 版) <http://dom.spec.whatwg.org/#dom-element-attributes>
]REFS]

* 定義

[7] [[オブジェクト]]が [[live]] であるなら、ある時点での[[スナップショット]]ではなく、
実際の裏のデータを操作しなければ[['''なりません''']] [SRC[>>13, >>3]]。

;; [14] [[HTML Standard]] は任意の[[DOM]] [[オブジェクト]]に対して「live」
を定義しています。 [[DOM Standard]] は[[コレクション]]について「live」と「static」
を定義しています。

[6] [[コレクション]]は、 [[live]] または[[静的]]のいずれかです [SRC[>>3, >>4]]。
仕様上明記されていない限り [[live]] です [SRC[>>3]]。

[10] [[read only array]] が [[live]] の時も、同様に実際のデータを反映させなければ[['''なりません''']]
[SRC[>>9]]。

[EG[
[8] 例えば、
[PRE(JS code)[
list = document.getElementsByTagName ('p');
console.log (list.length);
document.body.appendChild (document.createElement ('p'));
console.log (list.length);
]PRE]
... で表示される [CODE(DOMa)@en[[[length]]]] は、1回目より2回目の方が1大きな値となります。
]EG]

* live なオブジェクトの一覧

[11] [[live]] なオブジェクトには次のものがあります。これらは対象となる [[DOM]]
や [[CSSOM]]、[[媒体]]、[[DnD]] 対象データに変更が加わると、即座にその変更が反映されるものです。

[FIG(list)[
- [CODE(DOMi)@en[[[NodeList]]]] (一部を除く) [SRC[[[DOM Standard]], [[HTML Standard]]]]
- [CODE(DOMi)@en[[[HTMLCollection]]]] [SRC[[[DOM Standard]], [[HTML Standard]]]]
- [CODE(DOMi)@en[[[NamedNodeMap]]]] [SRC[[[AttrExodus]]]]
- [CODE(DOMi)@en[[[NodeIterator]]]] [SRC[[[DOM Standard]]]]
- [[read only array]]
-- [CODE(DOMi)@en[[[Element]]]] [CODE(DOMa)@en[[[attributes]]]] [SRC[[[DOM Standard]]]]
-- [CODE(DOMi)@en[[[DataTransfer]]]] [CODE(DOMa)@en[[[types]]]] [SRC[[[HTML Standard]]]]
-- [CODE(DOMi)@en[[[HTMLPropertiesCollection]]]] [CODE(DOMa)@en[[[names]]]] [SRC[[[HTML Standard]]]]
-- [CODE(DOMa)@en[[[styleSheetSets]]]] [SRC[[[CSSOM]]]]
- [CODE(DOMi)@en[[[VideoTrackList]]]] [SRC[[[HTML Standard]]]]
- [CODE(DOMi)@en[[[AudioTrackList]]]] [SRC[[[HTML Standard]]]]
- [CODE(DOMi)@en[[[TextTrackCueList]]]] [SRC[[[HTML Standard]]]]
- [CODE(DOMi)@en[[[ValidityState]]]] [SRC[[[HTML Standard]]]]
- [CODE(DOMi)@en[[[FileList]]]] [SRC[[[HTML Standard]]]]
- [CODE(DOMi)@en[[[CSSRuleList]]]] [SRC[[[CSSOM]]]]
- [CODE(DOMi)@en[[[CSSStyleDeclaration]]]] [SRC[[[CSSOM]]]]
]FIG]

[12] 定義上は [[live]] とはされていませんが、 [CODE(DOMi)@en[[[Range]]]],
[CODE(DOMi)@en[[[DOMStringMap]]]], [CODE(DOMi)@en[[[DOMTokenList]]]],
[CODE(DOMi)@en[[[DOMSettableTokenList]]]]
も対象となる[[木]]への変更がリアルタイムで反映されます。

[15] [CODE(HTMLe)@en[[[canvas]]]] に関わる次の2つの[[オブジェクト]]も [[live]]
とされていますが、これらの[[オブジェクト]]への変更が [CODE(HTMLe)@en[[[canvas]]]]
側に反映されることを意味しています。

[FIG(list)[
- [CODE(DOMi)@en[[[CanvasPattern]]]] [SRC[[[HTML Standard]]]]
- [CODE(DOMi)@en[[[CanvasGradient]]]] [SRC[[[HTML Standard]]]]
]FIG]

[16] [[画像写像]]も [[live]] とされていますが、[[スクリプト]]から直接アクセスできない内部状態なので、
他のものとは性質が違います。 ([[表モデル]]や[[文書アウトライン]]なども同様に [[live]]
と呼んでも良さそうなものですが、仕様書上 [[live]] とは明記されていません。)

[FIG(list)[
- [[画像写像]] [SRC[[[HTML Standard]]]]
]FIG]

* live でないもの

[19] [[DOM]] 上のほとんどのものは [[live]] で、最新の情報が反映されます。
[[live]] でないものは例外的です。

[22] [[DOM]] [[API]] が [CODE(JS)@en[[[String]]]] や [CODE(JS)@en[[[Date]]]]
の値を返す場合、[[スナップショット]]です。

[18] [CODE(DOMi)@en[[[XPathResult]]]] は [[live]] でも[[静的]]でもなく、
[[文書木]]が変更されると無効状態になります。

[20] [CODE(DOMa)@en[[[navigator.plugins]]]]/[CODE(DOMa)@en[[[navigator.mimeTypes]]]]
[[API]] は、 [CODE(DOMm)@en[[[refresh]]]] [[メソッド]]で明示的に更新しない限り、
変更されません。

[21] [CODE(DOMm)@en[[[querySelectorAll]]]] は、[[スナップショット]]を返します。

* 歴史

[REFS[
- [1] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-03-18 21:24:19 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4856&to=4857>
- [2] [CITE[IRC logs: freenode / #whatwg / 20140204]]
( ([TIME[2014-02-05 20:30:59 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20140204>
]REFS]

* 関連

[17] あるオブジェクトに付随する部分オブジェクトとみなせるような場合には、
[[live]] とは呼ばれないようです。例えば [CODE(HTMLe)@en[[[canvas]]]]
[[要素]]に対する [CODE(DOMi)@en[[[CanvasRenderingContext2d]]]]
は [[live]] であるとはいわれていません。 [CODE(DOMi)@en[[[Window]]]]
に対する [CODE(DOMi)@en[[[Screen]]]] や、 [CODE(DOMi)@en[[[XMLHttpRequest]]]]
に対する [CODE(DOMi)@en[[[XMLHttpRequestUpload]]]] は [[live]]
とはいわれていません。

[23] [CITE@en['''['''cssom-view''']''' Change "static DOMRect" to note saying "not live"]]
([[zcorpan]]著, [TIME[2017-04-11 20:17:11 +09:00]])
<https://github.com/w3c/csswg-drafts/commit/1100ce0bb74ccdd88ebfe765775ca8a4bb25451c>

[24] [CITE@en[More intuitive names for selector performance profiles · Issue #1694 · w3c/csswg-drafts]]
([TIME[2018-01-01 12:59:17 +09:00]])
<https://github.com/w3c/csswg-drafts/issues/1694>