我通过改组从后端获取json对象。当它到达前端时,我循环对象并通过它的id值放置到数组。 所以我正确地对它们进行了重新排序。但是我无法将我保存的元素附加到数组中。
这是我的例子:
HTML:<div id="selectors"></div>
var object = [
{"name":"name4", "id" : 4},
{"name":"name1", "id" : 1},
{"name":"name3", "id" : 3},
{"name":"name2", "id" : 2}
]
var elements = [];
$.each(object,function(index, obj){
var num = parseInt(obj.id)
elements[num] = $('<select></select>', {'id':num});
});
$('#selectors').append($(elements));
任何人都建议我采用正确的方法或告诉我最好的方法。
我看的输出应该是:
<div id="selectors">
<select id="1"></select><select id="2"></select><select id="3"></select><select id="4"></select>
答案 0 :(得分:2)
你最好使用map()
,它无论如何都会返回jQuery对象。然后,您可以通过sort()
s:
id
您的选择框
var elements = $.map(object, function(v){
return $('<select></select>', {'id':parseInt(v.id)});
}).sort(function(a,b){
return a.prop('id') > b.prop('id');
});
$('#selectors').append(elements);
答案 1 :(得分:0)
使用空的jQuery对象/集合$()
并向其添加元素。
var elements = $();
$.each(object,function(index, obj){
var num = parseInt(obj.id)
elements = elements.add($('<select></select>', {'id':num}));
});
$('#selectors').append(elements);
从这里使用jQuery sortElements
扩展名:http://james.padolsey.com/javascript/sorting-elements-with-jquery/
$('#selectors').append(elements);
elements.sortElements(function (o1, o2) {
return o1.id >= o2.id ? 1 : -1;
});
答案 2 :(得分:0)
试试这个......
$.each(object,function(index, obj){
var num = parseInt(obj.id)
$('#selectors').append($('<select />').attr('id',num));
});
你可以在这里查看.. http://jsfiddle.net/kka284556/8UKgr/2/
答案 3 :(得分:0)
我认为你想要排序数组。所以对于使用jquery object
的第一个排序.sort()
数组。
object = object.sort(function (a, b) { if (a.id< b.id) {
return -1;
}
else if (a.id> b.id) {
return 1;
}
return 0; });
然后使用.each()
请尝试以下代码:
var object = [
{"name":"name4", "id" : 4},
{"name":"name1", "id" : 1},
{"name":"name3", "id" : 3},
{"name":"name2", "id" : 2}
]
object = object.sort(function (a, b) { return a.id >= b.id ? 1 : -1; });
var elements = $();
$.each(object,function(index, obj){
$('#selectors').append($('<select></select>', {'id':obj.id}));
});
或者您也可以使用HTML Elements Object Collection。创建一个空集合$()
。
var object = [
{"name":"name4", "id" : 4},
{"name":"name1", "id" : 1},
{"name":"name3", "id" : 3},
{"name":"name2", "id" : 2}
]
object = object.sort(function (a, b) { return a.id >= b.id ? 1 : -1; });
var elements = $();
$.each(object,function(index, obj){
elements = elements.add($('<select></select>', {'id':obj.id}));
});
$('#selectors').append($(elements));
答案 4 :(得分:0)
或者这......
var fragment = document.createDocumentFragment();
object
.sort(function(a,b){return a.id > b.id})
.map(function(el){
var select = document.createElement('select');
select.id = el.id;
fragment.appendChild(select);
});
$('#selectors').append(fragment);
更多代码但性能更佳。 JSFIDDLE
答案 5 :(得分:0)
试试这个......
var object = [
{"name":"name4", "id" : 4},
{"name":"name1", "id" : 1},
{"name":"name3", "id" : 3},
{"name":"name2", "id" : 2}
]
var elements = [];
object.sort(function(obj1, obj2) {
// Ascending: first id less than the previous
return obj1.id - obj2.id;
});
var sel = $('<select>').appendTo('#selectors');
$.each(object, function(i, option){
sel.append($("<option>").attr('value',option.id).text(option.name));
});