12

次のようなJSONを返すAJAX呼び出しがあります...

{
  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...現在のようにキーの順序で読み取られるようにします。

これがキッカーです-ChromeではなくFirefoxで正常に動作するようです。

4

3 に答える 3

23

最初にそれを配列に変換し、それをソートしてから、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));
});
于 2012-10-19T20:54:09.943 に答える
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のコメントごとに更新

もちろん、列名("id"と"name")をデータから分離し、それを配列の配列にすることで、jsonの応答サイズを小さくすることができます。

于 2012-10-19T20:48:28.807 に答える
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();
});
于 2012-10-19T21:02:10.543 に答える