2015-01-29 2 views
0

데이터베이스의 데이터를 사용하여 채워지는 html select가 있습니다. 쿼리는 표시 순서 (DB의 다른 필드)에 따라 정렬됩니다.HTML 데이터 순서에 따라 선택

데이터 반환 : ID, 이름

예 :

First 
Third 
Second 

은 어떻게 유지 할 수 있습니다 선별에 추가하면 다음과 같이 {"1":"First","11":"Second","10":"Third"}

, 순서는, ID를 기반으로 데이터를 선택에 추가 할 때 데이터의 순서 지정?

답변

0

하나 개의 옵션 선택에 다음 (각 속성은 배열의 요소가 될 것이다) 배열로 JSON 개체를 변환 이름으로 배열을 정렬하고, 추가하는 것입니다 :

var json = {"1":"First","11":"Second","10":"Third"}; 
var list = new Array(); 

// insert all the properties and their values into an array of objects 
for(var propName in json) { 
    list.push({ "id": propName, "value":json[propName] }); 
} 

// sort the array using the value instead of the id 
list.sort(function compare(a,b) { 
       if (a.value < b.value) 
       return -1; 
       else 
       return 1; // we consider that if they have the same name, the first one goes first 
      }); 

// append the options in order in the select 
for (var x = 0; x < list.length; x++) { 
    $("#mySelect").append("<option value='" + list[x].id + "'>" + list[x].value + "</option>"); 
} 

당신 can see it working on this jsfiddle. 그 표시 순서뿐만 아니라 ID 및 이름을 포함하도록

+0

Thanks Alvaro . 당신은 '가치'가 당신이 소장하고있는 것이라고 가정하고 있습니다. 원래의 질문은 JSON 배열의 항목 순서에 따라 선택 순서를 지정하려고합니다. –

+0

JavaScript가 객체의 속성 순서를 보장하지 않기 때문에 원하는 결과를 얻을 수 없습니다 (이 질문 참조 : http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order). –

+0

해결 방법은 다른 구조로 값을 반환하고 가능한 경우 주문 순서를 포함하는 것입니다. 당신은 당신이'{ "1": "First", "2": "Second", ...}'(나는 이상하게 보입니다. 더 구조화 된 :'{{ ""id ":"1 ","value ":"First ","order ": 1}, {"id ":"2 ","value ":"Second ","order " 3}, ...]. 일단 구조체를 가지고 있다면, 위의 해결책을 따라 가면서 compare 함수를 a.value와 b.value에서 a.order와 b.order로 바꾼다. –

0

난, 리턴 된 데이터의 포맷을 변경하여이 문제를 해결 :

예 : [{ "ID": "4", "name": "이름 1", "display_order": "1"}, { "ID": "2", "이름": "이름 2", "디스플레이 _ 순서": "2"}]

관련 문제