Avatar billede tommyls Nybegynder
11. november 2002 - 12:53 Der er 5 kommentarer og
1 løsning

sortering

Jeg har en sorterings-funktion som sorterer mine data i en tabel. Mit problem er følgende:
Den sorterer mine data sammen med overskriften. Den skal derfor gøre som den gør nu - dog skal den ekskluderer al det indhold der ligger i den FØRSTE <tr>

kode:

<html>
<head>
<script type="text/javascript">
currentCol = 0
previousCol = -1

function CompareAlpha(a, b) {
    if (a[currentCol] < b[currentCol]) { return -1; }
    if (a[currentCol] > b[currentCol]) { return 1; }
    return 0;
}

function CompareAlphaIgnore(a, b) {
    strA = a[currentCol].toLowerCase();
    strB = b[currentCol].toLowerCase();
    if (strA < strB) { return -1; }
    else {
        if (strA > strB) { return 1; }
        else { return 0; }
    }
}

function CompareDate(a, b) {
    // this one works with date formats conforming to Javascript specifications, e.g. m/d/yyyy
    datA = new Date(a[currentCol]);
    datB = new Date(b[currentCol]);
    if (datA < datB) { return -1; }
    else {
        if (datA > datB) { return 1; }
        else { return 0; }
    }
}

function CompareDateEuro(a, b) {
    // this one works with european date formats, e.g. d.m.yyyy
    strA = a[currentCol].split(".");
    strB = b[currentCol].split(".")
    datA = new Date(strA[2], strA[1], strA[0]);
    datB = new Date(strB[2], strB[1], strB[0]);
    if (datA < datB) { return -1; }
    else {
        if (datA > datB) { return 1; }
        else { return 0; }
    }
}

function CompareNumeric(a, b) {
    //window.alert ("CompareNumeric");
    numA = a[currentCol]
    numB = b[currentCol]
    if (isNaN(numA)) { return 0;}
    else {
        if (isNaN(numB)) { return 0; }
        else { return numA - numB; }
    }
}

function TableSort(myTable, myCol, myType) {
   
   

   
    // Create a two-dimensional array and fill it with the table's content
   
    var mySource    = document.all(myTable);
    var myRows         = mySource.rows.length;
    var myCols         = mySource.rows(0).cells.length;
    currentCol         = myCol
    myArray         = new Array(myRows)
   
    for (i=0; i < myRows; i++) {
        myArray[i] = new Array(myCols)
        for (j=0; j < myCols; j++) {
            myArray[i][j] = document.all(myTable).rows(i).cells(j).innerHTML
        }
    }

    if (myCol == previousCol) {
        myArray.reverse(); // clicked the same column as previously - reverse the sort
    }
    else { // clicked on a new column - sort as indicated
        switch (myType) {
            case "a":
                myArray.sort(CompareAlpha);
                break;
            case "ai":
                myArray.sort(CompareAlphaIgnore);
                break;
            case "d":
                myArray.sort(CompareDate);
                break;
            case "de":
                myArray.sort(CompareDateEuro);
                break;
            case "n":
                myArray.sort(CompareNumeric);
                break;
            default:
                myArray.sort()
        }
    }

    // Re-write the table contents
    for (i=0; i < myRows; i++) {
        for (j=0; j < myCols; j++) {
            mySource.rows(i).cells(j).innerHTML = myArray[i][j]
        }
    }
   
   

    previousCol = myCol; // remember the current sort column for the next pass
    return 0;
}
</script>

</head>

<body>
<div class="standardList07">
<table id="inventory1" class="listContent">
<tr>
    <td onclick="TableSort('inventory1', 0, 'de')"><p><strong>Papirnavn</strong></p></td>
    <td onclick="TableSort('inventory1', 1, 'ai')"><p><strong>Bud</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Udbud</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Seneste kurs</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Ændring point</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Ændring %</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Omsætning</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Antal handler</strong></p></td>
</tr>
<tr style="background-color:#C6D8E1;">
    <td><p>Novozymes</p></td>
    <td><p>145.50</p></td>
    <td><p>147.00</p></td>
    <td><p>146.00</p></td>
    <td><p>-1.1</p></td>
    <td><p>-,48%</p></td>
    <td><p>10.00.00.000</p></td>
    <td><p>10.00.00.000</p></td>
</tr>
<tr>
    <td><p>Pindemad</p></td>
    <td><p>2145.50</p></td>
    <td><p>247.00</p></td>
    <td><p>1346.00</p></td>
    <td><p>-1.1</p></td>
    <td><p>-,48%</p></td>
    <td><p>20.00.00.000</p></td>
    <td><p>80.00.00.000</p></td>
</tr>
</table>
</div>
<body>
Avatar billede lequet Nybegynder
11. november 2002 - 13:07 #1
Du kan jo løse problemet sådan her, ved at have 2 tabeller frem for en... Så skal du bare lige sætte nogen width på dine tabel celler så det ser lidt kønnere ud

<div class="standardList07">
<table class="listContent">
<tr>
    <td onclick="TableSort('inventory1', 0, 'de')"><p><strong>Papirnavn</strong></p></td>
    <td onclick="TableSort('inventory1', 1, 'ai')"><p><strong>Bud</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Udbud</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Seneste kurs</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Ændring point</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Ændring %</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Omsætning</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Antal handler</strong></p></td>
</tr>
</table>

<table id="inventory1" class="listContent">
<tr style="background-color:#C6D8E1;">
    <td><p>Novozymes</p></td>
    <td><p>145.50</p></td>
    <td><p>147.00</p></td>
    <td><p>146.00</p></td>
    <td><p>-1.1</p></td>
    <td><p>-,48%</p></td>
    <td><p>10.00.00.000</p></td>
    <td><p>10.00.00.000</p></td>
</tr>
<tr>
    <td><p>Pindemad</p></td>
    <td><p>2145.50</p></td>
    <td><p>247.00</p></td>
    <td><p>1346.00</p></td>
    <td><p>-1.1</p></td>
    <td><p>-,48%</p></td>
    <td><p>20.00.00.000</p></td>
    <td><p>80.00.00.000</p></td>
</tr>
</table>
</div>
Avatar billede tommyls Nybegynder
11. november 2002 - 13:11 #2
jup I know - Det kan jeg bare desværre ikke bruge, da de skal ligge i samme tabel for at få samme størrelse uden at bruge styles!

T
Avatar billede Slettet bruger
11. november 2002 - 17:34 #3
Prøv at skifte funktionen TableSort ud med dette:

function TableSort(myTable, myCol, myType) {   
    // Create a two-dimensional array and fill it with the table's content
   
    var mySource    = document.all(myTable);
    var myRows        = mySource.rows.length;
    var myCols        = mySource.rows(1).cells.length;
    currentCol        = myCol
    myArray        = new Array(myRows)
   
    myArray[0] = "";
    for (i=1; i < myRows; i++) {
        myArray[i] = new Array(myCols)
        for (j=0; j < myCols; j++) {
            myArray[i][j] = document.all(myTable).rows(i).cells(j).innerHTML
        }
    }

    if (myCol == previousCol) {
        myArray.reverse(); // clicked the same column as previously - reverse the sort
    }
    else { // clicked on a new column - sort as indicated
        switch (myType) {
            case "a":
                myArray.sort(CompareAlpha);
                break;
            case "ai":
                myArray.sort(CompareAlphaIgnore);
                break;
            case "d":
                myArray.sort(CompareDate);
                break;
            case "de":
                myArray.sort(CompareDateEuro);
                break;
            case "n":
                myArray.sort(CompareNumeric);
                break;
            default:
                myArray.sort()
        }
    }

    // Re-write the table contents
    for (i=1; i < myRows; i++) {
        for (j=0; j < myCols; j++) {
            mySource.rows(i).cells(j).innerHTML = myArray[i][j]
        }
    }
   
   

    previousCol = myCol; // remember the current sort column for the next pass
    return 0;
}
Avatar billede tommyls Nybegynder
12. november 2002 - 08:56 #4
jeg får fejlen: "undefined" is null or not an object.
Avatar billede tommyls Nybegynder
12. november 2002 - 14:54 #5
Jeg måtte lave helt nyt .js - lukket -
Avatar billede Slettet bruger
12. november 2002 - 14:57 #6
Hm, umiddelbart har jeg svært ved at se fejlen. Hvis du ville smide et link i stedet, ville jeg have meget nemmere ved at overskue det.
Dine td'er skal i øvrigt se sådan her ud:

<td onclick="TableSort('inventory1', 0, 'de')"><p><strong>Papirnavn</strong></p></td>
    <td onclick="TableSort('inventory1', 1, 'ai')"><p><strong>Bud</strong></p></td>
    <td onclick="TableSort('inventory1', 2, 'ai')"><p><strong>Udbud</strong></p></td>
    <td onclick="TableSort('inventory1', 3, 'ai')"><p><strong>Seneste kurs</strong></p></td>
    <td onclick="TableSort('inventory1', 4, 'ai')"><p><strong>Ændring point</strong></p></td>
    <td onclick="TableSort('inventory1', 5, 'ai')"><p><strong>Ændring %</strong></p></td>
    <td onclick="TableSort('inventory1', 6, 'ai')"><p><strong>Omsætning</strong></p></td>
    <td onclick="TableSort('inventory1', 7, 'ai')"><p><strong>Antal handler</strong></p></td>

Altså med fortløbende numre.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester