在JQuery中按编号排序元素

时间:2009-11-02 18:46:10

标签: javascript jquery ajax sorting

我怎么能用jquery的属性值中的值来安排下面的div?感谢。

<a href="#" id="id1" class="lTest" amount="12">
    <div>abcd1</div>
<a/>

<a href="#" id="id2" class="lTest" amount="64">
    <div>abcd2</div>
<a/>

<a href="#" id="id3" class="lTest" amount="32">
    <div>abcd3</div>
<a/>

<a href="#" id="id4" class="lTest" amount="8">
    <div>abcd4</div>
<a/>

4 个答案:

答案 0 :(得分:1)

这个应该有效。

<!doctype html>
<html>
    <head>
        <script src='jquery.js'></script>
        <script>
            $(document).ready(init);

            function init() {
                var parent = $('#someid');
                var children = $('a', parent);
                children.sort(function(a, b) {
                   return parseInt($(a).attr('amount')) - parseInt($(b).attr('amount'));
                })
                $.each(children, function(i, child) {
                    parent.append(child);
                });
            }
        </script>
    </head>
    <body>
        <div id="someid">
            <a href="#" class="lTest" amount="12"><div>abcd2</div></a>
            <a href="#" class="lTest" amount="64"><div>abcd4</div></a>
            <a href="#" class="lTest" amount="32"><div>abcd3</div></a>
            <a href="#" class="lTest" amount="8"><div>abcd1</div></a>
        </div>
    </body>
</html>

[编辑]替换为SSCCE以证明其有效。我已经将abcdx中的x更改为预期的排序。你应该按顺序结束abcd1,abcd2,abcd3和abcd4。

答案 1 :(得分:0)

试试这个:

var links = $('a.lTest').sort( function(a,b) { return $(a).attr('amount') - $(b).attr('amount'); } );

for ( var i = 1; i < links.length; i++ ) {
    links.eq(i-1).insertBefore( links.eq(i) );
}

答案 2 :(得分:0)

首先,假设标签被div(id =“testDiv”)

包围

抱歉,我最初的做法是错误的......

不要这样做:破坏!!! (见下面的编辑)

var testDiv = $('#testDiv');   var children = testDiv.children('。lTest');   children.each(function(){$(this).remove();});   var testArray = $ .makeArray(children);   testArray.sort(功能(A,B){     return parseInt($(a).attr('amount')) - parseInt($(b).attr('amount');   });

children.each(function(){testDiv.append(this);});

编辑:这是工作版本:

var testDiv = $('#testDiv');
var children = testDiv.children('.lTest').remove();

children = children.sort(function(a,b){
  return parseInt($(a).attr('amount')) - parseInt($(b).attr('amount'));
});

testDiv.append(children);

答案 3 :(得分:0)

您对Tinister的回答的第一个评论表明您的测试页面对JQuery一无所知。确保在测试中正确包含JQuery并正确构造HTML。然后你可能会发现其中一个答案有效。

约翰