/
232.txt
79 lines (62 loc) · 4.66 KB
/
232.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
[1] [[DOM]] の界面 [CODE(DOMi)[NamedNodeMap]]
は、名前で識別される節 ([CODE(DOM)[[[Node]]]])
の集まりです。
[2] [CODE(DOM)[[[NodeList]]]] と異なり、
集まりの要素である各 [CODE(DOM)[Node]]
はそれぞれ異なる「名前」を持ちます。また、各 [CODE(DOM)[Node]]
の順序は必ずしも保存されません。
([CODE(DOMm)[item]] method で索引番号を指定できますが、
内容の列挙のための便宜上のものだそうです。
[WEAK[(ということは、 [WEAK[(DOM 1 には何も書かれていませんが、)]] [CODE[foreach my [VAR[$i]] (0〜[VAR[$NamedNodeMap]].[CODE(DOMa)[length]]−1) { [CODE(object)[debug]].[CODE(method)[print]] "[VAR[${i}]]th item:" + [VAR[$NamedNodeMap]].[CODE(DOMm)[item]] ([VAR[$i]]) }]] が期待通りに動作する [WEAK[(全項目を1回ずつ出力する。)]] ことくらいは期待してよいのかな? [WEAK[(本当に全く順序が保証されないのなら、 loop 内で何もしなくても、 [VAR[$i]] 番目の項目がどれかが勝手に変わっていく虞がある。)]])]]
[3]
,method ,[CODE(DOMm)[[[getNamedItem]]]] ,名前付き項目取得 ,[DOM1]
,method ,[CODE(DOMm)[[[getNamedItemNS]]]] ,名前付き項目取得 ,[DOM2]
,method ,[CODE(DOMm)[[[setNamedItem]]]] ,名前付き項目設定 ,[DOM1]
,method ,[CODE(DOMm)[[[setNamedItemNS]]]] ,名前付き項目設定 ,[DOM2]
,method ,[CODE(DOMm)[[[removeNamedItem]]]] ,名前付き項目削除 ,[DOM1]
,method ,[CODE(DOMm)[[[removeNamedItemNS]]]] ,名前付き項目削除 ,[DOM2]
,[CODE(DOMm)@en[[[item]]]] ,"[CODE(DOMi)@en[[[HTMLAttributeCollection]]]] ([[WinIE 4]]), [CODE(DOMi)@en[[[NamedNodeMap]]]] ([[DOM水準1中核]])"
,[CODE(DOMa)@en[[[length]]]] ,"[CODE(DOMi)@en[[[HTMLAttributeCollection]]]] ([[WinIE 4]]), [CODE(DOMi)@en[[[NamedNodeMap]]]] ([[DOM水準1中核]])"
[4] [[perl]] などで実装するなら[[連想配列]]にするのがよさげです。
- [DOM1] ''Document Object Model (Core) Level 1'' <http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1780488922>
- [DOM2] ''Document Object Model Core'' <http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1780488922>
- [5] >>4 でも module を [[bless]] してうまくまとめないと DOM 非適合になりそうな罠。うまくやっとくれよ。
[6]
[[DOM水準2]]と[[DOM水準3]]によると、
同じ [CODE(DOMa)@en[[[nodeName]]]] で異なる
[CODE(DOMa)@en[[[namespaceURI]]]] の
[CODE(DOMi)@en[[[Attr]]]] [[節点]]が複数1つの
[CODE(DOMi)@en[[[NamedNodeMap]]]]
に含まれる可能性があります。その場合、
[[DOM水準1]]の[[メソッド]]でどれが返されるかは[[実装依存]]です。ですが、常に同じものが返されなければなりません。
* 利用箇所
[7] [CODE(DOMi)@en[[[NamedNodeMap]]]] は次の箇所で使われています。
[FIG(list)[
- [CODE(DOMi)@en[[[Node]]]]
-- [CODE(DOMa)@en[[[attributes]]]]
- [CODE(DOMi)@en[[[DocumentType]]]]
-- [CODE(DOMa)@en[[[entities]]]]
-- [CODE(DOMa)@en[[[notations]]]]
-- [CODE(DOMa)@en[[[elementTypes]]]]
- [CODE(DOMi)@en[[[ElementTypeDefinition]]]]
-- [CODE(DOMa)@en[[[attributeDefinitions]]]]
]FIG]
;; [10] [CODE(DOMa)@en[[[attributes]]]] 以外は非標準です。 [CODE(DOMa)@en[[[attributes]]]]
は [[AttrExodus]] によって [CODE(DOMi)@en[[[Node]]]] から [CODE(DOMi)@en[[[Element]]]]
に移動され、[[型]]も [CODE(DOMi)@en[[[NamedNodeMap]]]] ではなく
[CODE(DOMi)@en[[[Attr]] [] ]] ([[read only array]]) に変更されています。
* 名前付き特性
[8] [[DOM3]] では[[索引付き特性]]にしか言及がありませんが、実際には[[名前付き特性]]によってもアクセスできるようです。
[9] [[Chrome]] で実装されていました。 [TIME[2013-01-03T05:55:41.200Z]]
[11] [CITE@en[Not worth it to rename NamedNodeMap · 64a93e8 · whatwg/dom]]
( ([TIME[2014-08-21 11:08:42 +09:00]] 版))
<https://github.com/whatwg/dom/commit/64a93e85fa7a7284b068d1926eaeb3a0f9fd16d9>
[12] [CITE@en[Introduce NamedNodeMap for attributes. Clean up algorithms around attrib... · 8af4826 · whatwg/dom]]
( ([TIME[2014-08-21 13:26:13 +09:00]] 版))
<https://github.com/whatwg/dom/commit/8af48267390b971a2ac02c7005ba42c08264b7e1>
[13] [CITE@en[Fix #141: NamedNodeMap's supported property names should not contain … · whatwg/dom@5dbefd1]]
([TIME[2016-01-07 11:55:22 +09:00]] 版)
<https://github.com/whatwg/dom/commit/5dbefd1035c5528e236a8b13dabcbd6c649e2d3e>
[14] [CITE@en[Fix #141 (again): omit non-lowercase property names from NamedNodeMap… · whatwg/dom@8898ac5]]
([TIME[2016-01-08 16:23:40 +09:00]] 版)
<https://github.com/whatwg/dom/commit/8898ac57e5d9ea9b5592f5e61d42fc5e420c870b>