2016-07-29 91 views
-1

我想排序我的div。他們都分享同一班。這是代碼。但它不起作用。基於內部元素的泡沫排序

腳本

function sort() { 
 
    for (var i = 0; i < $(".abc").length; ++i) { 
 
    for (var j = 0; j < $(".abc").length - i; ++j) { 
 
     var c1 = parseInt($(".abc").eq(j).children(".pop").text()); 
 
     var c2 = parseInt($(".abc").eq(j + 1).children(".pop").text()); 
 
     if (c1 > c2) { 
 
     var $temp = $(".abc").eq(j).(clone(true)); 
 
     $(".abc").eq(j) = $(".abc").eq(j + 1).(clone(true)); 
 
     $(".abc").eq(j + 1) = $temp; 
 
     } 
 
    } 
 
    } 
 
}

完整的代碼是在這裏https://jsfiddle.net/4m8eneez/3/

此外,我想知道一些比這更好的辦法。使用each()可以使它更簡單嗎? 請給出這些divs的快速排序提示。

Thanx提前:)

+1

爲什麼它複雜化? - > ** https://jsfiddle.net/4m8eneez/1/** – adeneo

+0

不是附加值,但 - https://youtu.be/k4RRi_ntQc8?t=48s :) – Dieter

+0

@adeneo sort()函數不是允許 –

回答

1

使用jQuery.sort方法,而不是

function sort() { 
 
    var sorted = $('.abc').sort(function(a, b) { 
 
    return +b.textContent < +a.textContent; 
 
    }); 
 
    $('#wrapper').html(sorted); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<body> 
 
    <div id="wrapper"> 
 
    <div id="m1" class="abc"> 
 
     <span class="pop">2</span> 
 
    </div> 
 
    <div id="m2" class="abc"> 
 
     <span class="pop">3</span> 
 
    </div> 
 
    <div id="m3" class="abc"> 
 
     <span class="pop">1</span> 
 
    </div> 
 
    <div id="m4" class="abc"> 
 
     <span class="pop">7</span> 
 
    </div> 
 
    </div> 
 
    <br> 
 
    <button id="sort" onclick="sort()"> 
 
    Sort 
 
    </button> 
 
</body>

+0

先生我應該做這個沒有排序()函數 –

+0

@SudhanshuSaini你被允許使用jQuery,但你不允許使用內置排序嗎?爲什麼...... –

+0

順便說一下,我不確定'$(...)。html(stuff)'是否實際上將'stuff'轉換爲一個字符串並將其作爲一個片段進行解析,但我總是認爲它沒有。如果是這樣的話,就不會'$('#wrapper')。empty()。append(sorted)'be better? –