Hatena::ブログ(Diary)

nazonoDiary

2007-01-18 木

compareDocumentPosition

| 16:09 | compareDocumentPositionを含むブックマーク compareDocumentPositionのブックマークコメント

で、編集画面が使いにくい(投稿関係ボタンをテキスト・エリアの下に)のを作るときにドキュメントが全然見つからずに苦労したcompareDocumentPositionについて

そもそもieだと contains で「エレメントは親子関係にあるか?」が調べられるのだけれど、Mozillaではその関数は定義されてなさそう。Firebugでエレメントを見ているとcompareDocumentPositionというそれっぽい関数を見つけたのはいいが、使い方がさっぱりわからない…

DOM関係のドキュメントを調べるときにとても参考になるJavaDocには

short compareDocumentPosition(Node other) throws DOMException

ドキュメントでの位置について参照ノード (このメソッドが呼び出されているノード) とパラメータとして渡されたノードをドキュメント順に比較します。

パラメータ
other - 参照ノードと比較するノード
戻り値
参照ノードに対するノードの相対的位置
例外
DOMException - NOT_SUPPORTED_ERR: 比較されたノードが、一貫した実装固有の結果を返すようになっていない、異なる DOM 実装からのものである場合に発生する
導入されたバージョン
DOM Level 3

http://72.5.124.55/j2se/1.5.0/ja/docs/ja/guide/plugin/dom/org/w3c/dom/Node.html#compareDocumentPosition(org.w3c.dom.Node)

と数値が返されることは書かれているけど、どんな数値が返されるかは書かれていない! W3C の文章も同じ。

調べてみると、こんな定義っぽい

a.compareDocumentPosition(b) の時に

DOCUMENT_POSITION_DISCONNECTED (1)
同じdocumentに接続されてないよ
DOCUMENT_POSITION_PRECEDING (2)
bはaより前にあるよ
DOCUMENT_POSITION_FOLLOWING (4)
bはaより後にあるよ
DOCUMENT_POSITION_CONTAINS (8)
bはaの子孫だよ
DOCUMENT_POSITION_CONTAINED_BY (16)
bはaの祖先だよ
DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC (32)
実装依存
しらべる.compareDocumentPosition( ... ) の時の、それぞれの位置にあるエレメントを返した場合の返値
document
 +-DOCUMENT_POSITION_PRECEDING
 +-DOCUMENT_POSITION_CONTAINS & DOCUMENT_POSITION_PRECEDING = 10
 | +- DOCUMENT_POSITION_PRECEDING
 | +- しらべるタグ
 | + +- DOCUMENT_POSITION_CONTAINED_BY & DOCUMENT_POSITION_FOLLOWING = 20
 | +- DOCUMENT_POSITION_FOLLOWING
 +-DOCUMENT_POSITION_FOLLOWING

+-DOCUMENT_POSITION_DISCONNECTED

こんなかんじ

DOCUMENT_POSITION_PRECEDINGとかはdocumentのプロパティーとしてとれる。a==bの時は0がかえるぽい。

使用例はここ

トラックバック - http://d.hatena.ne.jp/nazoking/20070118/1169104142
Connection: close