2012-07-31 2 views
0

내 javascript 응용 프로그램에서 divs를 드래그 한 후 ... 모든 div에 숫자 클래스를 지정하고 위치순으로 정렬하려고합니다. 나는 많은 것을 연구했고, 다음을 만들었다. 그러나 그것은 단지 작동하지 않는다. 이전 값을 덮어 쓰기 때문이다Javascript - 다차원 배열 정렬 - 문자열 및 Int - 순서 By

var ele = document.getElementsByTagName("div"); 
var i = 0; 
var MyDrags = []; 

while(ele[i]) { 
    if(ele[i].id.substr(0, 4)=="drag") { 
     MyDrags["distance"]=parseInt(document.getElementById(ele[i].id).style.top,10); 
     MyDrags["id"]=ele[i].id; 
    } 
    i++; 
} 
MyDrags.sort(function(a,b) { 
    return a.distance - b.distance; 
}); 
i = 0; 
while(MyDrags["distance"][i]) { 
    document.getElementById(MyDrags["id"][i]).innerHTML=MyDrags["distance"][i]; 
    i++; 
} 
+0

Jquery 나 다른 라이브러리를 사용하기 위해 DOM 조작을 수행 할 것을 강력히 권장합니다. 복잡한 일을하는 경우 털이 자랄 수 있습니다. – VoronoiPotato

+0

'MyDrags = new Array()'대신에'MyDrags = []'를 사용하십시오. 더 깨끗하고 더 성능이 좋습니다 (http://jsperf.com/literal-vs-constructor-array/4). –

+0

@ChrisFrancis 고맙습니다. 두 번 테스트했습니다 ... 그리고 'new Array()'가 항상 가장 빠릅니다. 그러나 배열을 만드는 방법을 바꿀 것입니다. – Kenedy

답변

1

(내부 HTML이 변경되지 않습니다), 당신은 다음과 같아야합니다, 당신의 코드가 작동하도록, 각 반복에서 새로운 객체를 할당해야합니다 :

var ele = document.getElementsByTagName('div'); 
var i = 0; 
var MyDrags = [], dst; 

while (ele[i]) { 
    if (ele[i].id.substr(0, 4) === 'drag') { 
     MyDrags.push({ 
      distance: parseInt(document.getElementById(ele[i].id).style.top, 10), 
      id: ele[i].id 
     }); 
    } 
    i++; 
} 

MyDrags.sort(function(a, b) { 
    return a.distance - b.distance; 
}); 

i = 0; 
while(MyDrags[i]) { 
    if (dst = MyDrags[i]['distance']) { 
     document.getElementById(MyDrags[i]['id']).style.top = dst + 'px'; 
     document.getElementById(MyDrags[i++]['id']).innerHTML = dst; 
    } 
} 
+0

고맙습니다 : D 그렇지만 코드를 테스트 할 때 div가 드래그 된 후 (정렬 코드가 호출 될 때) 브라우저가 중단되고 아무 것도 수행하지 않습니다. 배열을 만들 때 "dst"는 무엇을 의미합니까? – Kenedy

+1

@Kenedy, 방금 구문/사용 실수를 지적 했으므로 나머지 페이지에 대한 컨텍스트가 없습니다. 전체 jsfiddle을 게시 하시겠습니까? – epoch

+0

네, 물론 ... 고마워요! : D 원본 HTML에서 코드를 붙여 넣었지만 바이올린에서는 작동하지 않습니다. 어쨌든 이것은 원래의 전체 코드입니다. URL : http://jsfiddle.net/S7yVC/ – Kenedy