<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="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>の <dfn><code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">compareDocumentPosition</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor></dfn>は、2つの<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><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><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> <cite xml:lang="en-US">Web DOM Core</cite>
<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://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#dom-node-comparedocumentposition">http://dvcs.w3.org/hg/domcore/raw-file/tip/Overview.html#dom-node-comparedocumentposition</anchor-external></li><li><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-US">Document Object Model Core</cite><ul><li><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> <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-3-Core/core.html#Node3-compareDocumentPosition">http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-compareDocumentPosition</anchor-external></li><li><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> <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-3-Core/core.html#DocumentPosition">http://www.w3.org/TR/DOM-Level-3-Core/core.html#DocumentPosition</anchor-external></li></ul></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> <cite xml:lang="en-US">Document Object Model XPath</cite> 
<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-3-XPath/xpath.html#DocumentOrder">http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#DocumentOrder</anchor-external></li></ul></refs><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:">Web DOM Core</anchor> には存在することだけで実質的な規定がまだされていません。
<time>2010-12-31T06:40:47.000Z</time></p></section><section><h1>引数</h1><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> この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は引数を1つだけ取ります。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></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> 第1引数 <dfn><code class="DOMp" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">other</anchor></code></dfn> は、比較対象となる <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">オブジェクト</anchor>です。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></p></section><section><h1>返し値</h1><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> この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は2<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>としては
<code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned short</anchor></code> です <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src>。</p></section><section><h1><code class="DOM" xml:lang="en">DocumentPosition</code></h1><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> 驚くべきことに <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM3</anchor> 仕様上は関係がほのめかされているだけで明示されていないのですが、
<code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">compareDocumentPosition</anchor></code> は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">定義群</anchor> <dfn><code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DocumentPosition</anchor></code></dfn>
に属する<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="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">界面</anchor> <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Node</anchor></code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">定義群</anchor> <code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DocumentPosition</anchor></code> には、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">データ型</anchor>が <code class="IDL" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">unsigned short</anchor></code> である以下の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">定数</anchor>があります <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;13</anchor-internal></src>。</p><dl><dt><dfn><code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_DISCONNECTED</anchor></code></dfn> (<code>0x01</code>)</dt><dd>両<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">連結</anchor>ではありません。 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<anchor>連結</anchor>していない<anchor>節点</anchor>の順序は常に<anchor>実装規定</anchor>です。)</weak></dd><dt><dfn><code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_PRECEDING</anchor></code></dfn> (<code>0x02</code>)</dt><dd>与えられた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>です。</dd><dt><dfn><code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_FOLLOWING</anchor></code></dfn> (<code>0x04</code>)</dt><dd>与えられた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>です。</dd><dt><dfn><code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_CONTAINS</anchor></code></dfn> (<code>0x08</code>)</dt><dd>与えられた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">参照節点</anchor>を含んでいます。 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(含む<anchor>節点</anchor>は常に先行する<anchor>節点</anchor>でもあります。)</weak></dd><dt><dfn><code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_CONTAINED_BY</anchor></code></dfn> (<code>0x10</code>)</dt><dd>与えられた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">参照節点</anchor>に含まれています。 <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(含まれる<anchor>節点</anchor>は常に後続する<anchor>節点</anchor>でもあります。)</weak></dd><dt><dfn><code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC</anchor></code></dfn> (<code>0x20</code>)</dt><dd>どちらが先行でどちらが後続かは<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装規定</anchor>です。</dd></dl></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:">メソッド</anchor>がよばれた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>を<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">参照節点<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">reference node</rt></rubyb></dfn>とするとき、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">参照節点</anchor>と第1引数に与えられた<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>に基づき調べて<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ビットマスク</anchor>として返します
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src>。</p><section><h1>ビットマスクの決定</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> この<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>は2<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>を返します。
この値は次のようにして決定されます。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;13</anchor-internal></src></p><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> 2<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>は何も設定せずに返します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> そうでなければ、共通の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">包含子</anchor> (両<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>を<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><anchor>含む</anchor><rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">contains</rt></rubyb></dfn><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>) を探します。<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>は、その<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子節点</anchor>を直接含みます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>は、<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">附属している<rt xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">attached</rt></rubyb>他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor> <weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(<anchor>要素</anchor>に対する<anchor>属性</anchor>、<anchor>文書型</anchor>に対する<anchor>実体</anchor>や<anchor>記法</anchor>など)</weak> を直接含みます。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="23" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[23]</anchor-end> 含まれている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>ですが、間に挟まる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>が増えるほど「直接」度は減少していきます。</li></ul><ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[24]</anchor-end> 共通の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">包含子</anchor><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>がなければ、<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="25" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[25]</anchor-end> 両<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">包含子</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>) 同士の順序によって順序が決定します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 結果は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">連結</anchor>しておらず、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装規定</anchor>です。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> この結果は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">根</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>上に残っており、他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">包含子</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>されない限り、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">安定</anchor>です。</li></ul></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> 一方が他方の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>に先行し、含まれている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">包含子</anchor>の後続となっています。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="29" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[29]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="24" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;24</anchor-internal>、<anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;28</anchor-internal> のいずれでもない場合には、両方の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>が存在するはずです。この場合、そのような<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>または比較対象の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>を含んでいる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>が丁度1つずつ、合計2つ存在するので、その順序によって比較対象の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>の順序が決まります。<ol><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="30" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[30]</anchor-end> 両者がともに<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子供節点</anchor>なら、自然な <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> 上の順序を返します。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="31" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[31]</anchor-end> どちらかが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子供</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>で無い方に後続するものとします。例えば<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子要素</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>が先行する) とします。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> どちらも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子供</anchor>でなく、 <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nodeType</anchor></code> が異なるなら、大きい順とします。</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> どちらも<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">子供</anchor>でなく、 <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nodeType</anchor></code> も同じなら、順序は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">実装依存</anchor>です。<ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> この順序は同じ <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">nodeType</anchor></code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</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>です。</li></ul></li></ol></li></ol></li></ol><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;33</anchor-internal> が「実装規定」ではなく「実装依存」なのは、typo なのか意図的なのかどうなのでしょうね。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="44" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[44]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Firefox</anchor> でも <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Chrome</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>同士だと
<code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC</anchor></code> | (<code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_PRECEDING</anchor></code> または 
<code class="DOMc" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOCUMENT_POSITION_FOLLOWING</anchor></code> が返されるようです。違う<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</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><section><h1>文書順</h1><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:">文書順</anchor>」は通常の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>に対しては <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> 仕様で定義されていますが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM XPath</anchor> 仕様では <code class="DOMi" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">XPathNamespace</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>が追加されているため、
それに対応した拡張された「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書順</anchor>」が定義されています。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM XPath</anchor> に対応している場合には拡張された定義に基づき結果を返さなければなりません <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src>。</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="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> という規定が2004年の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM XPath</anchor> 仕様では <code xmlns="http://www.w3.org/1999/xhtml" class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">compareTreePosition</anchor></code> 
という現存しないメソッド名についてなされていますw</comment-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="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> でも、 <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;18</anchor-internal> の処理モデルは「<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文書順</anchor>」の定義を使わずに規定されていますね。</comment-p></section><section><h1>異なる実装からの節点の比較</h1><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:">DOM3</anchor> は異なる <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</anchor> の実装が混在する環境を扱っています。異なる <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</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="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">節点</anchor>が異なる <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DOM</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> <code class="DOM" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">NOT_SUPPORTED_ERR</anchor></code> を<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">投げます</anchor>。 <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal></src></p></section></section><section><h1>実装</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="41" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[41]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Gecko</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WebKit</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Opera</anchor> のいずれも実装しています。 <time>2011-01-01T03:47:59.200Z</time></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="38" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[38]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">WinIE9</anchor> 以降は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IE9モード</anchor>でのみ対応しています。</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="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> <cite xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-us">compareDocumentPosition Method (A, APPLET, attribute, ...)</cite>
( (<time xmlns="http://www.w3.org/1999/xhtml">2010-12-31 21:40:43 +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="http://msdn.microsoft.com/en-us/library/ff975125(VS.85).aspx">http://msdn.microsoft.com/en-us/library/ff975125(VS.85).aspx</anchor-external></comment-p></section><section><h1>テスト・ケース</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="43" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[43]</anchor-end> <cite>Index of /~wakaba/test/web/dom/node/compare</cite> (<time>2012-12-24 22:08:47 +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="http://suika.fam.cx/~wakaba/test/web/dom/node/compare/">http://suika.fam.cx/~wakaba/test/web/dom/node/compare/</anchor-external></li></ul></refs></section><section><h1>関連</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="39" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[39]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の包含関係を調べる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メソッド</anchor>には他に <code class="DOMm" xml:lang="en">contains<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Element.prototype.contains</title></code> があります。
<code class="DOMm" xml:lang="en">contains<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Element.prototype.contains</title></code> は <code class="DOMm" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">compareDocumentPosition</anchor></code>
とは違って同じ<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="40" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[40]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">要素</anchor>の順序は <code class="DOMa" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">sourceIndex</anchor></code> <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="42" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[42]</anchor-end> <cite>IRC logs: freenode / #whatwg / 20121015</cite>
( (<time>2012-10-27 16:12:54 +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="http://krijnhoetmer.nl/irc-logs/whatwg/20121015#l-365">http://krijnhoetmer.nl/irc-logs/whatwg/20121015#l-365</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="45" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[45]</anchor-end> <cite xml:lang="en">Make Attr inherit from Node again</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2016-08-19 21:44:07 +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/625a0747f137454c155a7b577a9e45be1aa35a34">https://github.com/whatwg/dom/commit/625a0747f137454c155a7b577a9e45be1aa35a34</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="46" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[46]</anchor-end> <cite xml:lang="en">Further Attr node fixes for compareDocumentPosition()</cite>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">annevk</anchor>著, <time>2016-09-01 01:29:21 +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/0e17e05b7b0273799b853c4782b2eac9a88fdea1">https://github.com/whatwg/dom/commit/0e17e05b7b0273799b853c4782b2eac9a88fdea1</anchor-external></p></section></body></html>