Benutzer:Wiegels/table.js
aus Wikipedia, der freien Enzyklopädie
< Benutzer:Wiegels
Dies ist die aktuelle Version dieser Seite, zuletzt bearbeitet am 9. Oktober 2006 um 19:40 Uhr durch imported>Wiegels(10164) (Beispiel angepasst, verlinkte Überschriften zugelassen, Spaltennummerierung verschoben).
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
//<pre><nowiki>
// Makes tables sortable by columns
// by [[:de:User:Wiegels]]
// 2006-10-08 - 2006-10-09
//
// Macht eine Tabelle, identifiziert durch ihre HTML-id, nach Spalten sortierbar.
// Bei der Initialisierung werden die Kopfzellen mit Links versehen,
// bei deren Anklicken die Zeilen sortiert werden.
// Die Sortiermethoden werden mit einer Zeichenfolge festgelegt.
// Bei einer Sortierung nach einer Spalte wird diese gefärbt und ausgerichtet
// sowie die erste Spalte neu numeriert.
//
// Parameter:
// 1. table_id: HTML-id der Tabelle
// 2. orders: Zeichenfolge aus Sortiermethoden aller Spalten
// Bedeutung der Zeichen:
// a / A: alphabetisch, Ausrichtung links
// d / D: nach Datum (Kurzschreibweise), Ausrichtung zentriert
// n / N: numerisch, Ausrichtung rechts
// a / d / n: aufsteigend
// A / D / N: absteigend
// andere: wirkungslos
//
// Beispiel:
// if (wgPageName=='Wikipedia:Beitragszahlen') {
// document.getElementsByTagName('table')[1].setAttribute('id', 'ben_stat');
// TABLE.InitTable('ben_stat', '#a-NNddNNNNN');
// }
var TABLE = {
InitTable: function(table_id, orders) {
var tableNode = document.getElementById(table_id);
if (tableNode && tableNode.nodeName=='TABLE') {
var trNode = tableNode.getElementsByTagName('tr')[0];
var thNodes = trNode.getElementsByTagName('th');
for (var number = 0; number<thNodes.length; number++) {
var order = orders.substr(number, 1);
if ('adn'.indexOf(order.toLowerCase())>=0) {
var thNode = thNodes[number];
var aNode = document.createElement('a');
with (aNode) {
setAttribute('href', 'javascript:TABLE.SortRows(\''+table_id+'\', '+number+', \''+order+'\');');
var textNode = thNode.firstChild;
if (textNode.hasChildNodes())
textNode = textNode.firstChild;
appendChild(document.createTextNode(textNode.data));
}
thNode.removeChild(thNode.firstChild);
thNode.appendChild(aNode);
}
}
}
},
column: -1,
order: '',
SortRows: function(table_id, column1, order) {
var column0 = this.column;
this.column = column1;
this.order = order;
var order = this.order.toLowerCase();
color0 = '#ffffff';
color1 = '#f9f9ff';
var tableNode = document.getElementById(table_id);
var tbodyNode0 = tableNode.getElementsByTagName('tbody')[0];
var tbodyNode1 = document.createElement('tbody');
var thNodes = tbodyNode0.firstChild.getElementsByTagName('th');
if (column0>=0)
thNodes[column0].setAttribute('bgColor', color0);
thNodes[column1].setAttribute('bgColor', color1);
tbodyNode1.appendChild(tbodyNode0.firstChild);
var rows = Array();
while (trNode = tbodyNode0.firstChild) {
trNode = tbodyNode0.removeChild(trNode);
if (trNode.nodeName=='TR')
rows.push(trNode);
}
rows.sort(this.Diff);
if (this.order.toUpperCase()==this.order)
rows.reverse();
for (var number = 0; number<rows.length; number++) {
var tdNodes = rows[number].getElementsByTagName('td');
if (column0>=0)
tdNodes[column0-1].setAttribute('bgColor', color0);
tdNodes[column1-1].setAttribute('bgColor', color1);
tdNodes[column1-1].setAttribute('align',
(order=='a' ? 'left' : '')+
(order=='d' ? 'center' : '')+
(order=='n' ? 'right' : ''));
rows[number].getElementsByTagName('th')[0].firstChild.data = number+1; /// '#'
tbodyNode1.appendChild(rows[number]);
}
tableNode.insertBefore(tbodyNode1, tbodyNode0);
tableNode.removeChild(tbodyNode0);
},
Diff: function(row1, row2) { /// this
var value1 = TABLE.Value(row1);
var value2 = TABLE.Value(row2);
if (TABLE.order.toLowerCase()=='n') {
value1 = value1-value2;
value2 = 0;
}
return (value1>value2?1:0)-(value1<value2?1:0);
},
Value: function(element) {
var node = element.getElementsByTagName('td')[this.column-1].firstChild;
var value = (node.nodeName=='A' ? node.firstChild.data : node.data);
var order = this.order.toLowerCase();
return (
(order=='a' ? value.replace(/\W/, '').toLowerCase() :
(order=='d' ? value.substr(6, 4)+value.substr(3, 2)+value.substr(0, 2) :
(order=='n' ? value.replace(/[^\d\.].*$/, '') : ''))));
}
};
//</nowiki></pre>