2017-01-27 7 views
0
<div id='panelb'> 
    <div class='item'>Ćao</div> 
    <div class='item'>Bella</div> 
    <div class='item'>Mare</div> 
</div> 

Ich sortiere die oben divs mit folgendem Code sortiert werden:wie überprüfen, ob Elemente

js

var items = $('.item').get(); 
items.sort(function(a, b) { 
    return $(a).text().localeCompare($(b).text()); 
}); 
$('#panelb').append(items); 

Es funktioniert, aber was ich brauche ist zu prüfen, ob Artikel sortiert oder nicht, vor das obige Verfahren.

Etwas wie:

if ('.item').are(:sorted) {alert ('sorted');} 
else {alert ('not sorted');} 

Jede Idee?

+1

Ich könnte mir vorstellen, dass jeder überprüfen, ob zu sehen Die Sortierung würde so lange dauern wie die Sortierung. – j08691

+0

@ j08691, ist egal, ich muss diese Informationen an den Benutzer – bonaca

+1

Nun gut, holen Sie sich die Elemente, eine Kopie, sortieren Sie die Kopie, vergleichen Sie die beiden. –

Antwort

1
var testOutOfOrder = function(item, idx) { 
    if (idx === 0) return false; 
    return ($(item).text().localeCompare($(items[idx - 1]).text()) < 0); 
}; 
if (items.some(testOutOfOrder)) { 
    ... do sort here 
} 

Dies wird getestet, wenn irgendwelche außer Betrieb sind. Sie können auch einen Standard für Schleife und Pause erstellen, wenn Ihre Umgebung die 'some()' Methode nicht unterstützt.

var testOutOfOrder = function(items) { 
    var isOutOfOrder = false; 
    for (var i = 0; i < items.length; i++) { 
    if ($(item).text().localeCompare($(items[idx - 1]).text()) < 0) { 
     isOutOfOrder = true; 
     break; 
    } 
    } 
    return isOutOfOrder; 
}; 

if (testOutOfOrder(items)) { 
    ... sort logic here 
} 
1

Nun, auf der Grundlage der Kommentar von Mike McCaughan, wollte ich es einfach zu versuchen:

$(document).ready(function() { 
 

 
    var items = $('.item'), // get the items 
 
     clonedItems = items.clone(), // copy the items 
 
     isSorted = false; 
 

 
    // sort the copy 
 
    clonedItems.sort(function(a, b) { 
 
    return $(a).text().localeCompare($(b).text()); 
 
    }); 
 

 
    // compare items 
 
    isSorted = $.arrayCompare(items, clonedItems); 
 

 
    // if not sorted from the first time, show them sorted 
 
    if (!isSorted) { 
 
    $('#panelb').html(clonedItems); 
 
    } 
 
    
 
}); 
 

 
// Obtained from: http://stackoverflow.com/a/5186565/1178686 
 
jQuery.extend({ 
 
    arrayCompare: function(arrayA, arrayB) { 
 
    if (arrayA.length != arrayB.length) { 
 
     return false; 
 
    } 
 
    // sort modifies original array 
 
    // (which are passed by reference to our method!) 
 
    // so clone the arrays before sorting 
 
    var a = jQuery.extend(true, [], arrayA); 
 
    var b = jQuery.extend(true, [], arrayB); 
 
    a.sort(); 
 
    b.sort(); 
 
    for (var i = 0, l = a.length; i < l; i++) { 
 
     if (a[i] !== b[i]) { 
 
     return false; 
 
     } 
 
    } 
 
    return true; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div id="panelb"> 
 
    <div class="item">Ćao</div> 
 
    <div class="item">Bella</div> 
 
    <div class="item">Mare</div> 
 
</div>

Verwandte Themen