webForumDet fria alternativet

Fast i sorterings träsket...

.NET

2 svar · 1 549 visningar · startad av T_Codez

Medlem sedan juli 2001458 inlägg
Frågan#1

Hej

Här är en liten irriterande historia som jag stirrat mig blind på bra
länge nu...

Problematik: Fel i sorteringen

Miljö: VStudio 2010

Den sorterar finemang... Men gör det i stigande ordning först och sen på
Klick nr 2 blir det i fallande ordning... Spelar ingen roll om jag vänder
på true / false heller i specsorterrev variabeln. Lite villrådig just nu... :q

Alla ideer är välkomna... :)

Mina Trial n' Error ideer har en grym torka just nu :(

Här sker Klicket:

<div id="curvalfilter" title="@Html.LocalizedString("_Sort_AlarmVarning")">
  <img src="/Images/alarmclick1.png" width="10" height="20" onclick="curvalfilt()">
</div>

Funktionens Kod ser ut så här:

// Funktionen Som Sorterar på Alarm och Varning
            var specsorter;
            var specsortrev = true;

            function curvalfilt(e)
            {
	// Här är värdet true
                if (!specsorter)	//kollar om htmlObjektet innehåller något
                    return;

	// Här blir det false tilldelning till variabeln
	  specsortrev = !specsortrev;

	   if (!e) 	// Har ett klick skett?
                    e = window.event;

                //IE9 & Other Browsers
                if (e.stopPropagation) { e.stopPropagation(); }
                //IE8 and Lower
                else { e.cancelBubble = true;}

                specsorter[specsorter.length - 1].click(); 
                return true;
            }

Här är lite JScript där det händer lite grejer också...
Jag provat lite varianter och även slängt med dess genererade felmeddelanden...
Som kanske gör dig klokare än vad det gör mig just nu...

			
            var t = document.getElementsByTagName("table").item(0);
            var $t = $(t);

            sorttable.makeSortable(t);
            $t.columnFilters({ wildCard: undefined, excludeColumns: [@string.Join(",", columnFilterExclude)] });
            $("#_filterText@(realColumnCount - 1)").parent().prepend($('#resetbutton').css('visibility', '').show());
            @*Listar "Curvalfilter" som sorterar på Larm och Varning *@
            $('#Current_value').prepend($('#curvalfilter').css('visibility', '').show());
            $("#_filterText@(realColumnCount - 1)").parent().prepend($('#savebutton').css('visibility', '').show());

            // genererar: 0x800a01b6 - Microsoft JScript runtime error: Object doesn't support property or method 'sortitreverse'
            // specsorter = sorttable.makeClickable.sortitreverse(t);

            // specsorter = sorttable.sortitreverse.makeClickable(t); // sorttable.makeClickable(t);
            // genererar: 0x800a138f - Microsoft JScript runtime error: Unable to get value of the property 'makeClickable': object is null or undefined

            specsorter = sorttable.makeClickable(t);
            // Får sorteringen att funka men i fel ordning... Urgha ???
				
            $("#sitestable").css('width', $("#sitestable").width() + 30 + 'px');
            $("._filterText").each(function () { $(this).css('width', $(this).width() + 0 + 'px'); });
            applyCookie();

Förklara gärna hur jag ska gå till väga som om det vore till en treåring...

Tack för uppmärksamheten och din tid :D

Medlem sedan juli 2001458 inlägg
#2

Lite mer Jscript kod hittad...

Jaha ja

Hittade lite mer Jscript i Jquery historien som tydligen är ett biblitek smockat
med Jscript. Inte min kopp kaffe direkt... Men ni kloka / smarta därute är ena hejare på det här:

Problem som fortfarande är live är:

* sorteringsordningen ska vändas.
* WebDings "font" pilen ska kommenteras bort för att den spökar till formateringen lite...

Tack snälla för att du orkar kolla på den här tråden igen:

Javisstja koden också :OO

    makeClickable: function (table) {
        headrow = table.tHead.rows[0].cells;
        for (var i = 0; i < headrow.length; i++) { //headrow.length
            $(headrow[i]).on("click", function (e) {
                sorttable.sortit(this);
            });
        }
    	       return headrow;
    },
        // sortit: function (that, rev) {
       	sortit: function (that, rev, special) {
        debugger;
        if (sorting) return;

        sorting = true;     // Originalkod...
        var tb = that.sorttable_tbody.tBodies[0];
        var $tb = $(tb), disp = $tb.css('display');

        if (that.className.search(/\bdata-sorttable_sorted\b/) != -1) {
            // if we're already sorted by that column, just 
            // reverse the table, which is quicker
            that.className = that.className.replace('data-sorttable_sorted',
                                                    'data-sorttable_sorted_reverse');
            that.removeChild(document.getElementById('data-sorttable_sortfwdind'));
            sortrevind = document.createElement('span');
            sortrevind.id = "data-sorttable_sortrevind";
            //sortrevind.innerHTML = stIsIE ? '<font face="webdings">5</font>' : '&#x25B4;';
            that.appendChild(sortrevind);
            //            $tb.css('display', disp).show();
            sorttable.reverse(that);

            sorting = false; // Originalkod

            return;
        }

        if (that.className.search(/\bdata-sorttable_sorted_reverse\b/) != -1) {
            // if we're already sorted by that column in reverse, just 
            // re-reverse the table, which is quicker
            that.className = that.className.replace('data-sorttable_sorted_reverse',
                                                    'data-sorttable_sorted');
            that.removeChild(document.getElementById('data-sorttable_sortrevind'));
            sortfwdind = document.createElement('span');
            sortfwdind.id = "data-sorttable_sortfwdind";
            sortfwdind.innerHTML = stIsIE ? '<font face="webdings">6</font>' : '&#x25BE;';
            that.appendChild(sortfwdind);
            sorttable.reverse(that);
            //          $tb.css('display', disp).show();
            sorting = false;  //originalkod återställd efter lite trial n' error  / TT
            //  sorting = true;
            return;
        }

        // remove data-sorttable_sorted classes
        theadrow = that.parentNode;
        forEach(theadrow.childNodes, function (cell) {
            if (cell.nodeType == 1) { // an element
                cell.className = cell.className.replace('data-sorttable_sorted_reverse', '');
                cell.className = cell.className.replace('data-sorttable_sorted', '');
            }
        });
        sortfwdind = document.getElementById('data-sorttable_sortfwdind');
        if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
        sortrevind = document.getElementById('data-sorttable_sortrevind');
        if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }

        that.className += ' data-sorttable_sorted';
        sortfwdind = document.createElement('span');
        sortfwdind.id = "data-sorttable_sortfwdind";
        sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
        that.appendChild(sortfwdind);

        if (rev) {
            that.className = that.className.replace('data-sorttable_sorted',
                                                    'data-sorttable_sorted_reverse');
            that.removeChild(document.getElementById('data-sorttable_sortfwdind'));
            sortrevind = document.createElement('span');
            sortrevind.id = "data-sorttable_sortrevind";
            sortrevind.innerHTML = stIsIE ? '<font face="webdings">5</font>' : '&#x25B4;';
            that.appendChild(sortrevind);
        }
        // build an array to sort. that is a Schwartzian transform thing,
        // i.e., we "decorate" each row with the actual sort key,
        // sort based on the sort keys, and then put the rows back in order
        // which is a lot faster because you only do getInnerText once per row
        row_array = [];
        col = that.sorttable_columnindex;
        rows = that.sorttable_tbody.tBodies[0].rows;
        for (var j = 0; j < rows.length; j++) {
            row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
            //alert(row_array[row_array.length-1][0]);
        }
        /* If you want a stable sort, uncomment the following line */
//        sorttable.shaker_sort(row_array, that.sorttable_sortfunction);                  //Tillfälligt bortkommenterad orginalrad återställd. /TT
        sorttable.shaker_sort(row_array.reverse(), that.sorttable_sortfunction);      //Att Testa... / TT

   	    /* and comment out that one */
   	    //sorttable.shaker_sort(row_array.reverse());                                   // Att prova... / TT
       	//row_array.sort(that.sorttable_sortfunction);                                  //Bara testar för att se vad som händer (ändring 1)
        //row_array.reverse();       	                                                //Bara testar för att se vad som händer (ändring 2)
        //debugger;

        if (rev) {
            var k = row_array.length % 2;
            for (var j = row_array.length - 1; j >= 0; j--) {
                var tri = row_array[j][1];

                that.df.appendChild(tri);
                if ((j + k) % 2 == 0) {
                    tri.className = tri.className.replace('trodd', 'treven');
                    //    rows.push(tri.replace('trodd', 'treven'));
                } else {
                    //    rows.push(tri.replace('treven', 'trodd'));
                    tri.className = tri.className.replace('treven', 'trodd');
                }
            }
        } else {
            for (var j = 0; j < row_array.length; j++) {
                var tri = row_array[j][1];
                that.df.appendChild(tri);

                if (j % 2 == 0)
                {
                    tri.className = tri.className.replace('trodd', 'treven');
                    //    rows.push(tri.replace('trodd', 'treven'));
                } else

                {
                    //    rows.push(tri.replace('treven', 'trodd'));
                    tri.className = tri.className.replace('treven', 'trodd');
                }
            }
        }
        tb.appendChild(that.df);
        sorting = false;
        delete row_array;
    },

Ja jag vet... men jag orkade inte ta bort alla kommentarer...

Medlem sedan juli 2001458 inlägg
#3

Hittade felet till slut :-)

Det var bara att lägga till:

row_array.reverse();

Lösningen går att läsa här: http://www.kryogenix.org/code/browser/sorttable/

276 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)