originale JavaScript-codes von J. Strübig
Tabellen sortieren sort_table.js ltrim.js zebra-code
modifizierte Beipiel-Tabelle (code am Seitenende):
♫ | Firma | Vorname | Nachname | Telefon | Fax | website | Straße Nr. | Plz. | Ort | |
---|---|---|---|---|---|---|---|---|---|---|
*** | Muster-Unternehmen | Maximilian | Mustermensch | ++49 1234 56 78 90 | ++49 1234 56 78 91 | max@mustermensch.net | mustermensch.net | Beispielweg 99 | 01234 | Musterhausen-Beispielsen |
* | a | b | c | ++31 9 | ++31 9 | d | e | f | 98765 | g |
** | G | F | E | ++41 55 | ++41 55 | D | C | B | 23456 | A |
Paket als zip-Datei herunterladen.
nun noch die code-snippets der Modifikationen:
in der Datei 'sort_table.js':
1. Modifikation, direkt zu Begin des codes, unterhalb der Versions-Vermerke:
aus:
// Das Element das angezeigt wird, wenn die Spalte abwärts sortiert ist
SortTable.up = String.fromCharCode(9660);
SortTable.alt_up = 'Aufwärts sortieren';
// Das Element das angezeigt wird, wenn die Spalte aufwärts sortiert ist
SortTable.down = String.fromCharCode(9650);
SortTable.alt_down = 'Abwärts sortieren';
wurde, um die Umlaute zu umgehen:
// Das Element das angezeigt wird, wenn die Spalte abwärts sortiert ist
SortTable.up = String.fromCharCode(9660);
SortTable.alt_up = 'aufsteigend sortieren';
// Das Element das angezeigt wird, wenn die Spalte aufwärts sortiert ist
SortTable.down = String.fromCharCode(9650);
SortTable.alt_down = 'absteigend sortieren';
2. Modifikation, innerhalb des click-Events, um die Richtungszeiger abzuschalten:
statt:
pointer.style.visibility = 'hidden';
[...]
if(last_sort) last_sort.style.visibility = 'hidden';
pointer.style.visibility = '';
nun:
pointer.style.display = 'none';
[...]
if(last_sort) last_sort.style.display = 'none';
pointer.style.display = 'none';
Die Anweisung 'display: none;' benötigte erst Platz in der Tabellenzelle, wenn der Zustand 'inline' aktiviert würde.
Hingegen 'visibility: hidden;' bzw. 'visibility: ;' verbreitern die Zelle immer um die Zeichenbreite des Zeigers,
was mit der variablen Tabellen-Eigenschaft 'width: auto;' nicht schön ist, wenn die Breite minimal bleiben soll.
Die zentrierten Spaltentitel der header-Zeile bleiben so optisch immer mittig, die sonst nach links verschoben wurden.
Die komplette Abschaltung erfolgte ebenfalls wegen 'width: auto;', damit die Spaltenbreiten sich nicht ständig ändern.
3. Modifikation ziemlich am Ende des codes, wegen der Zweifarbigkeit:
aus:
// umhängen
var tCopy = tableBody.cloneNode(false);
for(var i = 0; i < tr_length; i++) {
if(zebra) {
rows[i].elem.className = rows[i].elem.className.replace(/( ?odd)/, "");
if(i % 2) rows[i].elem.className += ' odd' ;
wurde:
// umhängen
var tCopy = tableBody.cloneNode(false);
for(var i = 0; i < tr_length; i++) {
if(zebra) {
rows[i].elem.className = rows[i].elem.className.replace(/( ?odd)/, "");
rows[i].elem.className = rows[i].elem.className.replace(/( ?notodd)/, "");
if(i % 2) rows[i].elem.className += ' notodd' ;
if(i+1 % 2) rows[i].elem.className += ' odd' ;
in der Datei 'zebra.js':
Am Ende der Funktion ZebraTabelle(t) lediglich die letzte Zeile ergänzen.
function ZebraTabelle(t) {
var obj = t;
var rows = [];
var self = this;
var hasBody = !!t.getElementsByTagName('tbody').length;
var body = t.getElementsByTagName('tbody').length ?
t.getElementsByTagName('tbody')[0] : t;
var rows = body.getElementsByTagName('tr');
for(var i = 0; i < rows.length; i += 2) rows[i].className += ' odd';
diese hier ==> for(var i = 1; i < rows.length; i += 2) rows[i].className += ' notodd';
und nachfolgend noch der html code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15">
<meta http-equiv="imagetoolbar" content="no">
<!-- IE imagetoolbar deaktivieren; für einzelne TAGs: <img src="" title="" galleryimg="no"> -->
<html>
<head>
<title>zweifarbiges Zebra mit Chamäleonzeile</title>
<script type="text/javascript" src="ltrim.js"></script>
<script type="text/javascript" src="sort_table.js"></script>
<script type="text/javascript" src="zebra.js"></script>
<script type="text/javascript">
//<!--
window.onload = function() {
SortTable.init();
ZebraTabelle.init();
}
// -->
</script>
<style type="text/css">
.odd {border-bottom: 0.2em solid rgb(255, 255, 255); background-color: rgb(230, 230, 230); height: 25px;}
.notodd {border-bottom: 0.2em solid rgb(255, 255, 255); background-color: rgb(245, 220, 120); height: 25px;}
</style>
<script type="text/javascript">
//<!-- /* IE & Netscape */
function highlight(rowNum){
if (navigator.appName=='Microsoft Internet Explorer'){
var u = rowNum;
curCol = document.getElementsByTagName("tr")[u].currentStyle.backgroundColor;
document.getElementsByTagName("tr")[u].style.backgroundColor='rgb(60,220,50)'
}
else if (navigator.appName=='Netscape'){
var u = rowNum;
curCol = window.getComputedStyle(document.getElementsByTagName("tr")[u],"null" ).getPropertyValue("background-color");
document.getElementsByTagName("tr")[u].style.backgroundColor='rgb(60,220,50)'
}
}
function dimm(rowNum){
var m = rowNum;
document.getElementsByTagName("tr")[m].style.backgroundColor=curCol;
document.getElementsByTagName("tr")[m].removeAttribute("style");
}
// -->
</script>
</head>
<body>
<center>
<!-- Editor-Preview zeigt CSS und dynamisches HTML nicht an, deshalb <table> mit
background-color: rgb(210, 220, 220); (wegen des Kontrastes zum Seitenhintergrund) -->
<table class="sortable, zebra"
style="text-align: left; width: auto; background-color: rgb(210, 220, 220); color: rgb(0, 0, 0);
font-family: Arial; font-size: 8pt; border-collapse: collapse; white-space: nowrap; vertical-align: middle;"
border="0" cellpadding="4" cellspacing="0">
<colgroup> <col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0.1em solid rgb(255, 255, 255); width: auto;"><col
style="border-right: 0em solid rgb(255, 255, 255); width: auto;"></colgroup><thead>
<tr
style="border-bottom: 0.18em solid rgb(255, 255, 255); padding-left: 5px; background-color: rgb(160, 160, 160);
color: rgb(255, 255, 255); text-align: center; font-size: 10pt; font-weight: bold; height: 25px;">
<th>♫</th>
<th>Firma</th>
<th>Vorname</th>
<th>Nachname</th>
<th>Telefon</th>
<th>Fax</th>
<th>Email</th>
<th>website</th>
<th>Straße Nr.</th>
<th>Plz.</th>
<th>Ort</th>
</tr>
</thead><tbody>
<tr onmouseover="highlight(rowIndex)" onmouseout="dimm(rowIndex)">
<td>***</td>
<td>Muster-Unternehmen</td>
<!--
Für den IE müssten alle <th> bzw. <td> tags mit style="" versehen werden,
da die border-Anweisungen der css-styles (.odd & .notodd) für <tr> nicht interpretiert werden.
(Microsoft halt.. ach ja)
<td style="border-bottom: 0.2em solid rgb(255, 255, 255); border-right: 0.1em solid rgb(255, 255, 255);"><br></td>
-->
<td>Maximilian</td>
<td>Mustermensch</td>
<td>++49 1234 56 78 90</td>
<td>++49 1234 56 78 91</td>
<td><a href="mailto:max@mustermensch.net">max@mustermensch.net</a></td>
<td><a href="http://www.mustermensch.net" target="_blank">mustermensch.net</a></td>
<td>Beispielweg 99</td>
<td>01234</td>
<td>Musterhausen-Beispielsen</td>
</tr>
<tr onmouseover="highlight(rowIndex)" onmouseout="dimm(rowIndex)">
<td>*</td>
<td>a</td>
<td>b</td>
<td>c</td>
<td>++31 9</td>
<td>++31 9</td>
<td>d</td>
<td>e</td>
<td>f</td>
<td>98765</td>
<td>g</td>
</tr>
<tr onmouseover="highlight(rowIndex)" onmouseout="dimm(rowIndex)">
<td>**</td>
<td>G</td>
<td>F</td>
<td>E</td>
<td>++41 55</td>
<td>++41 55</td>
<td>D</td>
<td>C</td>
<td>B</td>
<td>23456</td>
<td>A</td>
</tr>
</tbody>
</table>
</center>
</body>
</html>