按属性排序jQuery结果?

时间:2016-02-16 16:31:29

标签: javascript jquery sorting

是否可以按属性的值对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的原生能力有更优雅的方式。有吗?

2 个答案:

答案 0 :(得分:7)

您不需要构建中间数组,为方便起见,jQuery公开了Array.prototype.sort方法:

$.fn.sort = Array.prototype.sort;

由于Array.prototype.sort;是通用的 * ,它只是神奇地适用于jQuery集合。

&#13;
&#13;
$('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;
&#13;
&#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);