我有一个浓度,正在寻找有关继续进行的最佳方法的建议。我设置了一个选项卡式portlet接口。选项卡是从JSON响应中动态生成的,然后从第一个TAB激活上的另一个Web Service JSON响应中加载每个选项卡的portlet。港口需要由从JSON返回的预定变量订购(当前它们以AJAX请求返回的顺序加载)。
我正在寻找最简单的方法。我最初的想法是将变量附加到Portlet创建的类中,以最终获得类似于:
的HTML标记。<div class="tabBody">
<div class="portlet sortOrder1">Content</div>
<div class="portlet sortOrder4">Content</div>
<div class="portlet sortOrder2">Content</div>
<div class="portlet sortOrder5">Content</div>
<div class="portlet sortOrder3">Content</div>
</div>
然后在使用JavaScript加载所有Portlet之后对它们进行排序,并具有类似的内容:
tab.find('sortOrder2').insertAfter(tab.find('.sortOrder1'));
作为一个快速示例(Tab为变量)。实际实现将更加复杂,因为我可能会循环遍历所有端口,the sortorder选择器并将其解析为INT,因为每个选项卡不是静态的portlets数量。
我错过了一些东西,有一种痛苦的简单方法可以实现这一目标吗?
预先感谢。
更新:
我已经实现了以下由@AndréSnedeHansen给出的答案,并且它运作良好。分类顺序是通过数据属性方法(而不是按我最初打算使用类)来实现的,从而动态添加每个响应中返回的整数,然后在我的portletify的末尾进行排序(添加UI类可排序等)Tab方法。
在IE中进行测试回到7个,没有问题。
这是解决您正在寻找的
的快速方法html:
<div class="tabBody">
<div class="portlet" data-order="1">Content1</div>
<div class="portlet" data-order="4">Content4</div>
<div class="portlet" data-order="2">Content2</div>
<div class="portlet" data-order="5">Content5</div>
<div class="portlet" data-order="3">Content3</div>
</div>
JavaScript:
$(".tabBody .portlet").sort(function(x, y){
var orderX = parseInt($(x).attr("data-order"),10) || 0;
var orderY = parseInt($(y).attr("data-order"),10) || 0;
return orderX - orderY;
}).appendTo($(".tabBody"));
我为上述代码做了一个JSFIDDLE
$(".tabBody .portlet")
返回一个元素的数组,并且数组具有 sort
方法。排序方法在这里进一步描述: array.prototype.sort()