如何在jQuery中对随机div顺序进行排序?

在页面加载时,我使用此代码随机化子div的顺序:

function reorder() { var grp = $("#team-posts").children(); var cnt = grp.length; var temp, x; for (var i = 0; i < cnt; i++) { temp = grp[i]; x = Math.floor(Math.random() * cnt); grp[i] = grp[x]; grp[x] = temp; } $(grp).remove(); $("#team-posts").append($(grp)); } 

我似乎无法弄清楚如何以原始顺序恢复post。 这是我当前代码http://jsfiddle.net/JsJs2/的演示

在调用reorder()函数之前保留原始副本,如下所示,并在以后重新排序。

 var orig = $("#team-posts").children(); $("#undo").click(function() { orderPosts(); }); function orderPosts() { $("#team-posts").html( orig ) ; } 

工作演示

完整代码

 var orig = $("#team-posts").children(); ///caching original reorder(); $("#undo").click(function(e) { e.preventDefault(); orderPosts(); }); function reorder() { var grp = $("#team-posts").children(); var cnt = grp.length; var temp, x; for (var i = 0; i < cnt; i++) { temp = grp[i]; x = Math.floor(Math.random() * cnt); grp[i] = grp[x]; grp[x] = temp; } $(grp).remove(); $("#team-posts").append($(grp)); } function orderPosts() { // set original order $("#team-posts").html(orig); } 

假设它适用, “撤消”插件怎么样?

只需给每个项目一个具有相应顺序的类,然后获取每个div的类名并将其保存到变量中

 $("#team-posts div").each(function() { var parseIntedClassname = parseInt($(this).attr("class"); arrayName[parseIntedClassname] = $("#team-posts div." + parseIntedClassname).html() }); 

您可以通过将html按顺序保存到数组中来重新排序它们

 $("#team-posts").html(); for(var i=0;i'+arrayName[i]+'
'); }

保存原始订单的解决方案可能是最好的,但如果必须动态排序,可以使用:

http://www.w3schools.com/jsref/jsref_sort.asp

 function orderPosts() { var $grp = $("#team-posts"), ordered = $grp.children().toArray().sort(function(a, b) { return parseInt($(a).text()) > parseInt($(b).text()); }); $grp.empty().append(ordered); }