13 Stimmen

jQuery javascript benutzerdefinierte Sortierung Verfahren funktioniert in Firefox, aber IE scheint nicht zu bekommen ... (copy-paste Beispiel-Code)

Ich habe diesen Beispielcode auf der Grundlage eines echten Problems erstellt, das ich in einer Anwendung habe. Ich habe eine benutzerdefinierte Sortierprozedur, um jQuery-Arrays zu sortieren. Ein Container enthält eine Liste von Elementen mit speziellen Attributen.

Zum Sortieren:

  1. Lädt alle Elemente im Array temp
  2. Leert den Container
  3. Sortiert das temporäre Array in ein neues Array
  4. Sortierte Elemente an den Container anhängen

Irgendwie weiß Firefox, wie man sortiert, aber der IE nicht. Kann mir jemand sagen, was nicht richtig funktioniert?

(Sie können die nachstehende HTML-Datei in eine leere .html-Datei kopieren, sie sollte sofort funktionieren)

<html>
<head>
<script type="text/javascript" 
    src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script>
<script type="text/javascript">
    jQuery.fn.sort = function() {  
        return this.pushStack( [].sort.apply( this, arguments ), []);  
    } 

    function DoTheSort() {
        //Fetch elements in jQueryElement
        var sortableArray = $('#sortables').find('div.sortable');

        //Clear the sortables container
        $('#sortables').empty();

        //Sort the array
        var sortedArray = $(sortableArray).sort(sortProcedure);

        //Append sorted items
        jQuery.each(sortedArray, function() {
            alert($(this).attr("sortvalue"));
            $('#sortables').append(this);                
        });
    }

    function sortProcedure(a, b) {
    var value1 = parseInt($(a).attr("sortvalue"));
    var value2 = parseInt($(b).attr("sortvalue"));
        return value1 > value2;
    }

    </script>
</head>
<body>

    <a href="javascript:DoTheSort();">Sort</a>

    <div id="sortables">
        <div class="sortable" sortvalue="5">5</div>
        <div class="sortable" sortvalue="1">1</div>
        <div class="sortable" sortvalue="4">4</div>
        <div class="sortable" sortvalue="1">1</div>
        <div class="sortable" sortvalue="2">2</div>
        <div class="sortable" sortvalue="9">9</div>
        <div class="sortable" sortvalue="3">3</div>
    </div>

</body>
</html>

22voto

annakata Punkte 72408

Ihre Sortierprozedur ist subtil falsch: Sie müssen auch Gleichheiten berücksichtigen, und boolean ist nicht der richtige Rückgabetyp (siehe Anhang).

Tun Sie dies:

return value1 - value2;

anstelle von:

return value1 > value2;

Nachtrag:

Die allgemeine Form einer Sortier-Vergleichsfunktion f(A,B) muss > 0 zurückgeben, wenn A > B ist, < 0, wenn A < B ist, und 0, wenn keine Änderung vorgenommen werden muss. Die Rückgabe eines booleschen Wertes führt dazu, dass man mit falschen Werten konfrontiert wird, die nicht das repräsentieren, was man glaubt, dass sie tun.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X