是否可以按属性的值对jQuery结果进行排序?例如,请考虑以下代码段和结果:
$('span').each(function()
{
$('#log').append($(this).attr('name'));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<span name="a5"></span>
<span name="a3"></span>
<span name="a6"></span>
<span name="a1"></span>
<span name="a4"></span>
<div id="log"></div>
如果不修改HTML或DOM,我怎样才能最好地修改此代码以获得排序结果,即。 a1a3a4a5a6 ?虽然我显然可以将每个结果都放在一个数组中然后对它进行排序,但我假设使用jQuery的原生能力有更优雅的方式。有吗?
答案 0 :(得分:7)
您不需要构建中间数组,为方便起见,jQuery公开了Array.prototype.sort方法:
$.fn.sort = Array.prototype.sort;
由于Array.prototype.sort;
是通用的( * ),它只是神奇地适用于jQuery集合。
$('span')
.sort(function(a, b) {
return $(a).attr('name').localeCompare($(b).attr('name'));
})
.each(function() {
$('#log').append($(this).attr('name'));
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span name="a5"></span>
<span name="a3"></span>
<span name="a6"></span>
<span name="a1"></span>
<span name="a4"></span>
<div id="log"></div>
&#13;
<小时/> <子> * 原型方法的上下文中的通用意味着方法内部实现并不关心
this
实例是真正的Array
实例,只要它是sum = 0
for i in range(0, len(listA)):
sum += listA[i] * listB[i]
print(sum)
实例print(sum(a*b for (a,b) in zip(listA, listB)))
实例3}}。
子>
答案 1 :(得分:0)
尝试使用此代码:
var $names = $('span');
var $log = $('#log');
$names.sort(function(a,b){
var aProp = a.getAttribute('name'),
bProp = b.getAttribute('name');
if (aProp > bProp){
return 1;
}
if (aProp < bProp){
return -1;
}
return 0;
});
$names.appendTo($log);