티스토리 뷰
발생일: 2011.11.07
문제:
라이브러리 없이 각 노드의 관계를 비교하려고 하다보니 compareDocumentPosition() 이라는 메서드가 있더라.
비슷하게 contains()가 있다는 건 알고 있었는데, compareDocumentPosition()은 첨 들어본다.
자세히 알아보자.
해결책:
compareDocumentPosition() 메서드는 W3C DOM Level 3 Core 스펙에 정의되어 있다.
현재 노드와 파라미터로 전달되는 노드와의 관계를 비교해, 비트마스크 연산을 통한 정수값을 리턴한다.
node.compareDocumentPosition(otherNode) 와 같이 호출할 수 있으며,
각 노드의 관계에 따라 아래 값을 리턴한다.
비트 값 관계
000000 0 동일한 노드이다.
000001 1 서로 다른 도큐먼트에 존재하는 노드이다.
000010 2 node가 otherNode 보다 앞에 존재한다.
000100 4 node가 otherNode 보다 뒤에 존재한다.
001000 8 node가 otherNode의 부모이다. (포함한다)
010000 16 node가 otherNode의 자식이다. (포함된다)
두 노드의 관계에 따라 더해진(mask on 연산) 값을 리턴한다.
예를 들어, 아래와 같은 노드가 있다고 가정하고,
<div id="a"><div id="b"></div></div>
아래 메서드를 호출하면,
nodeA.compareDocumentPosition(nodeB); // 10을 리턴한다.
각 노드의 관계로 10을 리턴한다.
(nodeA는 nodeB의 부모이므로 8,
nodeA는 nodeB보다 앞에 존재하는 노드이므로 2가 더해져 10을 리턴한다.)
문제:
라이브러리 없이 각 노드의 관계를 비교하려고 하다보니 compareDocumentPosition() 이라는 메서드가 있더라.
비슷하게 contains()가 있다는 건 알고 있었는데, compareDocumentPosition()은 첨 들어본다.
자세히 알아보자.
해결책:
compareDocumentPosition() 메서드는 W3C DOM Level 3 Core 스펙에 정의되어 있다.
현재 노드와 파라미터로 전달되는 노드와의 관계를 비교해, 비트마스크 연산을 통한 정수값을 리턴한다.
node.compareDocumentPosition(otherNode) 와 같이 호출할 수 있으며,
각 노드의 관계에 따라 아래 값을 리턴한다.
비트 값 관계
000000 0 동일한 노드이다.
000001 1 서로 다른 도큐먼트에 존재하는 노드이다.
000010 2 node가 otherNode 보다 앞에 존재한다.
000100 4 node가 otherNode 보다 뒤에 존재한다.
001000 8 node가 otherNode의 부모이다. (포함한다)
010000 16 node가 otherNode의 자식이다. (포함된다)
두 노드의 관계에 따라 더해진(mask on 연산) 값을 리턴한다.
예를 들어, 아래와 같은 노드가 있다고 가정하고,
<div id="a"><div id="b"></div></div>
아래 메서드를 호출하면,
nodeA.compareDocumentPosition(nodeB); // 10을 리턴한다.
각 노드의 관계로 10을 리턴한다.
(nodeA는 nodeB의 부모이므로 8,
nodeA는 nodeB보다 앞에 존재하는 노드이므로 2가 더해져 10을 리턴한다.)
node.compareDocumentPosition()는 현재 IE9~, Chrome, FF, Safari, Opera에 구현되어 있다.
(http://www.quirksmode.org/dom/w3c_core.html#t120)
참고로,
compareDocumentPosition()의 값이 10을 리턴하는 경우는 node.contains() 메서드와 동일하다고 볼 수 있다.
#. 참고
compareDocumentPosition API by MDN
Comparing Document Position by John Resig
FF에서 contains() 구현하기 by quirksmode
W3C DOM Level 3 Spec : compareDocumentPosition
반응형
댓글
공지사항