/ Forside / Teknologi / Udvikling / Java Scripts / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java Scripts
#NavnPoint
molokyle 5410
Klaudi 2799
smorch 2439
kim 1360
Harlekin 1134
bentjuul 984
gibson 800
severino 695
Random 675
10  konsulent.. 626
innerHTML
Fra : Lars Olesen


Dato : 21-03-04 23:51

Fandt et smart eksempel på, hvordan man kan sortere en tabel med
javascript, så man ikke behøver at besvære serveren flere gange. Det
benytter sig imidlertid af innerHTML - men er der ikke noget med, at det
ikke rigtig bygger på DOM'en:

<http://www.devshed.com/c/a/JavaScript/Sorting-the-Easy-Way/2/>


--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

 
 
Lasse Reichstein Nie~ (22-03-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 22-03-04 00:45

Lars Olesen <lsolesen@hotmail.com> writes:

> Fandt et smart eksempel på, hvordan man kan sortere en tabel med
> javascript, så man ikke behøver at besvære serveren flere gange. Det
> benytter sig imidlertid af innerHTML - men er der ikke noget med, at
> det ikke rigtig bygger på DOM'en:

Jo, det er en Microsoft-opfindelse, og er ikke med i nogen W3C-
anbefaling. En bedre måde er at sortere rækkerne med DOM. Man skal,
som altid, undgå at have celler der strækker sig over mere end
en række, ellers bliver sortering noget rod.

---
/* table: reference til et table-element
* comp : funktion der sammenligner tabel-rækker
*/
function sortTable(table,comp) {
var rowArray = [];
var tbody = null;
for(var i=0;i<table.rows.length;i++) { // find rækker i en tbody
if (table.rows[i].parentNode.tagName.match(/^tbody$/i)) {
tbody = table.rows[i].parentNode;
rowArray.push(table.rows[i]);
}
}
rowArray.sort(comp);
for (i=0;i<rowArray.length;i++) {
tbody.appendChild(rowArray[i]);
}
}
---

Eksempel (husk at inkludere sortTable-funktionen):
---
<script type="text/javascript">

// generisk sammenligningsfunktion til sort
function cmp(a,b) {return (a>b)-(b>a);}

//funktioner der sammenligner celler i en række
function cmpCol1(a,b) {
return cmp(a.cells[0].firstChild.nodeValue,
b.cells[0].firstChild.nodeValue);
}
function cmpCol1rev(a,b) {
return cmp(b.cells[0].firstChild.nodeValue,
a.cells[0].firstChild.nodeValue);
}
function cmpCol2(a,b) {
return cmp(a.cells[1].firstChild.nodeValue,
b.cells[1].firstChild.nodeValue);
}
function cmpCol2rev(a,b) {
return cmp(b.cells[1].firstChild.nodeValue,
a.cells[1].firstChild.nodeValue);
}

</script>

<table>
<thead style="font-weight:bold">
<tr>
<td onclick="sortTable(this.parentNode.parentNode.parentNode,cmpCol1);">
Bogstav
</td>
<td onclick="sortTable(this.parentNode.parentNode.parentNode,cmpCol2);">
Tal
</td></tr>
</thead>
<tr><td>X</td><td>2</td></tr>
<tr><td>Y</td><td>1</td></tr>
<tr><td>Z</td><td>3</td></tr>
<tr><td>A</td><td>4</td></tr>
<tfoot style="font-weight:bold">
<tr>
<td onclick="sortTable(this.parentNode.parentNode.parentNode,cmpCol1rev);">
Bogstav
</td>
<td onclick="sortTable(this.parentNode.parentNode.parentNode,cmpCol2rev);">
Tal
</td></tr>
</tfoot>
</table>
---
Tryk på header eller footer for at sortere.

Held og lykke
/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Lars Olesen (22-03-2004)
Kommentar
Fra : Lars Olesen


Dato : 22-03-04 08:14

Lasse Reichstein Nielsen wrote:

> Jo, det er en Microsoft-opfindelse, og er ikke med i nogen W3C-
> anbefaling. En bedre måde er at sortere rækkerne med DOM. Man skal,
> som altid, undgå at have celler der strækker sig over mere end
> en række, ellers bliver sortering noget rod.

[snip funktion]

Det må jeg sige. Den løsning er noget mere elegant, end den jeg henviste
til. Den kræver ikke serversidekodning, den forudsætter ikke, at
rækkerne har specifikke id'er, som er puttet ind i arrays - alt i alt
bare bedre :)

Funktionen får lidt problemer, hvis en af posterne er et link, og det
kan det fx ofte være i en linkoversigt, man måske gerne vil sortere
enten efter linknavn og popularitet.

Men en rigtig, rigtig god og brugbar funktion.

--
Lars Olesen
Konkurrence på <http://www.fodboldenslegestue.dk>
Kan det gøres bedre? Navigation og brugervenlighed!

Lasse Reichstein Nie~ (22-03-2004)
Kommentar
Fra : Lasse Reichstein Nie~


Dato : 22-03-04 19:09

Lars Olesen <lsolesen@hotmail.com> writes:

> Funktionen får lidt problemer, hvis en af posterne er et link, og det
> kan det fx ofte være i en linkoversigt, man måske gerne vil sortere
> enten efter linknavn og popularitet.

Det er ikke sorteringen der får problemet. Det bliver bare lidt sværere
at lave sammenligningsfunktionen til rækkerne :)

/L
--
Lasse Reichstein Nielsen - lrn@hotpop.com
DHTML Death Colors: <URL:http://www.infimum.dk/HTML/rasterTriangleDOM.html>
'Faith without judgement merely degrades the spirit divine.'

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408847
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste