javascript 노드 정렬 구현 코드

2654 단어 노드 정렬
IE 에서 우 리 는 sourceIndex 를 이용 할 수 있 습 니 다.표준 브 라 우 저 는 compare DocumentPosition 을 사용 할 수 있 지만,오래된 표준 브 라 우 저 에 대해 서 는?XML 은 요?따라서 우 리 는 한 노드 의 속성 에 따라 다른 노드 와 의 관 계 를 확인 해 야 한다.제 생각 은 간단 합 니 다.만약 에 똑 같 으 면 0 으로 돌아 갑 니 다.만약 에 그들의 아버지 노드 가 같다 면 nextSibling 에 따라 이들 의 선후 순 서 를 확인 합 니 다.그렇지 않 으 면 최근 에 공공 조상 과 이 조상 에 가장 가 까 운 두 개의 아버지 노드(인성 적 으로 아버지 와 아버지)를 찾 을 수 있 습 니 다.이때 아버지 노드 와 같은 상황 이 아 닙 니까?!nextSibling 에 따 르 면 순 서 는 아이들 의 순서 입 니 다.(그래서 이 강 이라는 아버지 가 중요 합 니 다.이 세습 제 세상 에서!)하지만 요즘 은 공공 조상 들 이 서로 비교 하 는 것 중 하나 일 때 가 있다.물론 최근 이다.남 은 문 제 는 최근 공공 조상 을 구 하 는 문제 다.나의 사고방식 도 매우 간단 해서 반드시 효율 적 인 것 은 아니다.왜냐하면 대학 이 수학 을 모두 황폐 하 게 만 들 었 기 때문이다.맨 위 에 있 는 HTML 요소 까지 부모 노드 를 계속 위로 가 져 와 최초의 노드 와 함께 두 개의 배열 을 구성 합 니 다.그 다음 에 배열 의 마지막 요 소 를 비교 할 때마다 똑 같 으 면 그들 을 제거 합 니 다.똑 같은 것 은 모두 공공 조상 이기 때문에 다 르 면 그 중의 한 쪽 을 위로 취하 면 됩 니 다.다음은 테스트 페이지 와 원본 코드 입 니 다.window.console 을 사 용 했 기 때문에 fireforx,IE8,chrome 에서 결 과 를 보 는 것 을 권장 합 니 다.노드 정렬window.onload=function(){function shuffle(a){var array=a.concat();var i = array.length; while (i) { var j = Math.floor(Math.random()*i); var t = array[--i]; array[i] = array[j]; array[j] = t; } return array; } var log =function(s){ window.console && window.console.log(s) } var sliceNodes = function(arr){ var ret = [], i = arr.length; while (i) ret[--i] = arr[i]; return ret; } var sortNodes = function(a,b){ var p = "parentNode",ap = a[p],bp = b[p]; if(a===b){return 0}else if(ap===bp){/부모 노드 가 while(a=a.nextSibling){/이 두 형제 if(a===b){return-1}return 1}else if(!ap){ return -1 }else if(!bp){ return 1 } var al = [], ap = a while(ap && ap.nodeType === 1){ al[al.length] = ap ap = ap[p] } var bl = [],bp = b; while(bp && bp.nodeType === 1){ bl[bl.length] = bp bp = bp[p] } ap = al.pop(); bp = bl.pop(); while(ap===bp){/모든 공공 조상 ap=al.pop()을 제거 합 니 다.bp = bl.pop(); } if(ap && bp){//아버님 과 아버지 while(ap=ap.nextSibling){if(ap===bp){return-1}return 1}//최근 공공 조상 이 어느 쪽 과 비교 return ap?1 : -1 } var els = document.getElementsByTagName("div") els = sliceNodes(els);//순수 그룹 log(els)로 변환 하기;els = shuffle(els);//카드 세탁(사용자 정의 선택 기로 얻 은 노드 집합 상황)log(els);els=els.sort(sortNodes)log(els)}<
<<<<<<<<<<<<
<
<
<<<<<<<<
><<<<<<<<
<<
<<<<
<<<<<<><<<<<<<<<<<<<<

>

><<<<<<
888
999
[Ctrl+A 전체 주석:]

좋은 웹페이지 즐겨찾기