我有一个AJAX调用返回JSON,如...
{
490: "A",
675: "B",
491: "C",
520: "D",
681: "E",
679: "F",
538: "G"
}
然后我将其附加到select
使用:
var output = jQuery.parseJSON(data);
$.each(output, function(key, value) {
$el.append($("<option></option>")
.attr("value", key).text(value));
});
我想按值排序,因此输出为A,B,C,D...
,因为它只是按键的顺序读取。
这是踢球者 - 似乎在Firefox中运行良好,而不是在Chrome中运行。
答案 0 :(得分:21)
首先将其转换为数组,对其进行排序,然后创建html。 jsfiddle
var output = jQuery.parseJSON(data);
var temp = [];
$.each(output, function(key, value) {
temp.push({v:value, k: key});
});
temp.sort(function(a,b){
if(a.v > b.v){ return 1}
if(a.v < b.v){ return -1}
return 0;
});
$.each(temp, function(key, obj) {
$el.append($("<option></option>")
.attr("value", obj.k).text(obj.v));
});
答案 1 :(得分:2)
无法对对象进行排序。尝试将JSON作为数组返回,以确保它保持在您返回的确切顺序中:
[
{"id":490,"name":"A"},
{"id":675,"name":"B"},
{"id":491,"name":"C"},
{"id":520,"name":"D"},
{"id":681,"name":"E"},
{"id":679,"name":"F"},
{"id":538,"name":"G"}
]
这里是原作的缩写:http://jsfiddle.net/82BSm/2/并更改为数组:http://jsfiddle.net/82BSm/1/
按照pst的评论更新
当然,您可以通过从数据中分离列名称(&#34; id&#34;和#34; name&#34;)并使其成为数组数组来缩小json响应大小。
答案 2 :(得分:0)
这样的事情怎么样?
var output = jQuery.parseJSON(data);
var options = [];
$.each(output, function(key, value) {
options.push(
$("<option>").val(key).text(value)
);
});
options.sort(function(a, b) {
return a.text() > b.text();
});