<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> の界面 <code class="DOMi">NamedNodeMap</code>
は、名前で識別される節 (<code class="DOM"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>)
の集まりです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <code class="DOM"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NodeList</anchor></code> と異なり、
集まりの要素である各 <code class="DOM">Node</code>
はそれぞれ異なる「名前」を持ちます。また、各 <code class="DOM">Node</code>
の順序は必ずしも保存されません。
(<code class="DOMm">item</code> method で索引番号を指定できますが、
内容の列挙のための便宜上のものだそうです。
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(ということは、 <weak>(DOM 1 には何も書かれていませんが、)</weak> <code xmlns="http://www.w3.org/1999/xhtml">foreach my <var>$i</var> (0〜<var>$NamedNodeMap</var>.<code class="DOMa">length</code>−1) { <code class="object">debug</code>.<code class="method">print</code> &quot;<var>${i}</var>th item:&quot; + <var>$NamedNodeMap</var>.<code class="DOMm">item</code> (<var>$i</var>) }</code> が期待通りに動作する <weak>(全項目を1回ずつ出力する。)</weak> ことくらいは期待してよいのかな? <weak>(本当に全く順序が保証されないのなら、 loop 内で何もしなくても、 <var xmlns="http://www.w3.org/1999/xhtml">$i</var> 番目の項目がどれかが勝手に変わっていく虞がある。)</weak>)</weak></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end><table><tbody><tr><td>method</td><td><code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getNamedItem</anchor></code></td><td>名前付き項目取得</td><td>[DOM1]</td></tr><tr><td>method</td><td><code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">getNamedItemNS</anchor></code></td><td>名前付き項目取得</td><td>[DOM2]</td></tr><tr><td>method</td><td><code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setNamedItem</anchor></code></td><td>名前付き項目設定</td><td>[DOM1]</td></tr><tr><td>method</td><td><code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">setNamedItemNS</anchor></code></td><td>名前付き項目設定</td><td>[DOM2]</td></tr><tr><td>method</td><td><code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">removeNamedItem</anchor></code></td><td>名前付き項目削除</td><td>[DOM1]</td></tr><tr><td>method</td><td><code class="DOMm"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">removeNamedItemNS</anchor></code></td><td>名前付き項目削除</td><td>[DOM2]</td></tr><tr><td><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">item</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAttributeCollection</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE 4</anchor>), <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準1中核</anchor>)</td></tr><tr><td><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">length</anchor></code></td><td><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTMLAttributeCollection</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE 4</anchor>), <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準1中核</anchor>)</td></tr></tbody></table></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">perl</anchor> などで実装するなら<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">連想配列</anchor>にするのがよさげです。</p><ul><li>[DOM1] <em>Document Object Model (Core) Level 1</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1780488922">http://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-1780488922</anchor-external></li><li>[DOM2] <em>Document Object Model Core</em> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1780488922">http://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-1780488922</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;4</anchor-internal> でも module を <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">bless</anchor> してうまくまとめないと DOM 非適合になりそうな罠。うまくやっとくれよ。</li></ul><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準2</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準3</anchor>によると、
同じ <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nodeName</anchor></code> で異なる
<code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">namespaceURI</anchor></code> の
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Attr</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>が複数1つの
<code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code>
に含まれる可能性があります。その場合、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM水準1</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>でどれが返されるかは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装依存</anchor>です。ですが、常に同じものが返されなければなりません。</p><section><h1>利用箇所</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code> は次の箇所で使われています。<figure class="list"><ul><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code><ul><li><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attributes</anchor></code></li></ul></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DocumentType</anchor></code><ul><li><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">entities</anchor></code></li><li><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">notations</anchor></code></li><li><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">elementTypes</anchor></code></li></ul></li><li><code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ElementTypeDefinition</anchor></code><ul><li><code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attributeDefinitions</anchor></code></li></ul></li></ul></figure></p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml" class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attributes</anchor></code> 以外は非標準です。 <code xmlns="http://www.w3.org/1999/xhtml" class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">attributes</anchor></code>
は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">AttrExodus</anchor> によって <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> から <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Element</anchor></code>
に移動され、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">型</anchor>も <code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NamedNodeMap</anchor></code> ではなく
<code xmlns="http://www.w3.org/1999/xhtml" class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Attr</anchor> [] </code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">read only array</anchor>) に変更されています。</comment-p></section><section><h1>名前付き特性</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM3</anchor> では<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">索引付き特性</anchor>にしか言及がありませんが、実際には<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">名前付き特性</anchor>によってもアクセスできるようです。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</anchor> で実装されていました。 <time>2013-01-03T05:55:41.200Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <cite xml:lang="en">Not worth it to rename NamedNodeMap · 64a93e8 · whatwg/dom</cite>
( (<time>2014-08-21 11:08:42 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/64a93e85fa7a7284b068d1926eaeb3a0f9fd16d9">https://github.com/whatwg/dom/commit/64a93e85fa7a7284b068d1926eaeb3a0f9fd16d9</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <cite xml:lang="en">Introduce NamedNodeMap for attributes. Clean up algorithms around attrib... · 8af4826 · whatwg/dom</cite>
( (<time>2014-08-21 13:26:13 +09:00</time> 版))
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/8af48267390b971a2ac02c7005ba42c08264b7e1">https://github.com/whatwg/dom/commit/8af48267390b971a2ac02c7005ba42c08264b7e1</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> <cite xml:lang="en">Fix #141: NamedNodeMap's supported property names should not contain … · whatwg/dom@5dbefd1</cite>
(<time>2016-01-07 11:55:22 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/5dbefd1035c5528e236a8b13dabcbd6c649e2d3e">https://github.com/whatwg/dom/commit/5dbefd1035c5528e236a8b13dabcbd6c649e2d3e</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> <cite xml:lang="en">Fix #141 (again): omit non-lowercase property names from NamedNodeMap… · whatwg/dom@8898ac5</cite>
(<time>2016-01-08 16:23:40 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/8898ac57e5d9ea9b5592f5e61d42fc5e420c870b">https://github.com/whatwg/dom/commit/8898ac57e5d9ea9b5592f5e61d42fc5e420c870b</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <cite xml:lang="en">Fix #141 (again): omit non-lowercase property names from NamedNodeMap… · whatwg/dom@8898ac5</cite>
(<time>2016-01-30 21:13:10 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/8898ac57e5d9ea9b5592f5e61d42fc5e420c870b">https://github.com/whatwg/dom/commit/8898ac57e5d9ea9b5592f5e61d42fc5e420c870b</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <cite xml:lang="en">Add <strong></strong>[<strong></strong>CEReactions<strong></strong>]<strong></strong> annotations to mutating methods · whatwg/dom@3cd02d1</cite>
(<time>2016-04-26 19:08:59 +09:00</time> 版)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/3cd02d139c159a31fbb400e03932652c72fc7812">https://github.com/whatwg/dom/commit/3cd02d139c159a31fbb400e03932652c72fc7812</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <cite xml:lang="en">Editorial: define attribute list in terms of Infra's list</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2017-04-07 17:48:53 +09:00</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://github.com/whatwg/dom/commit/f88c7a087268f5a9cf55b92c40754107e696d705">https://github.com/whatwg/dom/commit/f88c7a087268f5a9cf55b92c40754107e696d705</anchor-external></p></section></body></html>