如何通过jquery中的文本按顺序绑定html选择

时间:2013-05-14 08:37:06

标签: jquery html json

我有一个json字符串

 json={"0":"-select-","10":"A","5":"B","14":"C"};

从PHP代码返回,按文本A,B,C排序

我将此json字符串绑定到jquery中的选择框

$.each(json,function(k,v){
    $('#UserCityRes').append('<option value="'+k+'">'+v+'</option>');
});

但它按值排序选择列表为

<select name="citylist" id="UserCityRes">
 <option value="0">select</option>
 <option value="5">B</option>
 <option value="10">A</option>
 <option value="14">C</option>
</select>

我按照文本顺序需要这个&#34; -select-,A,B,C&#34;订单,而不是价值。但jquery的$ .each函数按值的顺序附加它。

请帮我介绍如何按文字顺序排序和显示(在mozilla浏览器中工作正常,但不在ie和chrome中)

提前致谢

4 个答案:

答案 0 :(得分:2)

如果想保留项目的顺序,我建议使用像

这样的数组/集合
[{ "key": "0", "value": "-select-"}, { "key": "10", "value": "A"}, { "key": "5", "value": "B"}, { "key": "14", "value": "C"}]

答案 1 :(得分:0)

对象是无序集。你有两种方法 - 使用对id和value都有引用的排序键或使用数组 - 比如

{ "values": [
   { "bar": "foobar" },
   { "foo": "foobaz" }
] }

您可以使用for (i = 0; i < len; i++)迭代数组,并拥有原始订单。

有关详细信息,请查看here

答案 2 :(得分:0)

对象中的属性没有特定的顺序。将其转换为对象数组,然后您可以对其进行排序,因为数组在排序后保留顺序:

var items = $.map(json, function(v, k){ return { value: k, text: v }; });
items.sort(function(x,y){ return x.text < y.text ? -1 : 1 });

答案 3 :(得分:0)

请参考以下代码。

var values = [];
for(var i in json.message) {
   values.push({ key: i, value: json.message[i] });
}
values.sort(function(a, b) { return a.value.localeCompare(b.value); });
var str = values.map(function (kvp) { return kvp.value; }).join('\n');

谢谢,

希瓦