11. november 2002 - 12:53Der 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>
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>
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
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
Synes godt om
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; }
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:
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.