SELF-Treffen in Mannheim 2025

SELFHTML wird 30 Jahre alt!
Die Mitgliederversammlung findet am 24.05.2025 um 10:00 statt. Alle Mitglieder und Interessierte sind herzlich eingeladen.
Davor und danach gibt es Gelegenheiten zum gemütlichen Beisammensein. → Veranstaltungs-Ankündigung.

Beispiel:JS-Anw-sortierbare-Tabellen-3.html

Aus SELFHTML-Wiki
Wechseln zu: Navigation, Suche
<!DOCTYPE html>
<html lang="de">
	<head>
		<meta charset="UTF-8" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link rel="stylesheet" type="text/css" media="screen" href="./Beispiel:SELFHTML-Beispiel-Grundlayout.css" />
		<title>Beispiel: Tabellensortierter V3</title>
		<style type="text/css">
			table    { border:1px solid black; border-spacing:0px; border-collapse:collapse }
			table td { border:1px solid black; border-spacing:0px; border-collapse:collapse;padding:3px }
			table th { border:1px solid black; border-spacing:0px; border-collapse:collapse;padding:3px }
			table h2 { margin:0 }
		</style>
		<script>
		
( function() {

	"use strict";

	var tableSort = function(tab) {
		var titel = tab.getElementsByTagName("thead")[0].getElementsByTagName("tr")[0].getElementsByTagName("th");
		var tbdy = tab.getElementsByTagName("tbody")[0];
		var tz = tbdy.rows;
		var nzeilen = tz.length;
		if (nzeilen==0) return;
		var nspalten = tz[0].cells.length;
		var arr = new Array(nzeilen);
		var sortiert = -1;
		var sorttype = new Array(nspalten);

		var sortbuttonStyle = document.createElement('style'); // Stylesheet für Button im TH
		sortbuttonStyle.innerText = '.sortbutton { width:100%; height:100%; border: none; background-color: transparent; font: inherit; color: inherit; text-align: inherit; padding: 0; cursor: pointer; } .sortbutton::-moz-focus-inner { margin: -1px; border-width: 1px; padding: 0; }';
		document.head.appendChild(sortbuttonStyle);
		
		var initTableHead = function(sp) { // Kopfzeile vorbereiten
			var b = document.createElement("button");
			b.type = "button";
			b.className = "sortbutton";
			b.innerHTML = titel[sp].innerHTML;
			b.addEventListener("click",function() { tsort(sp); },false);
			titel[sp].innerHTML = "";
			titel[sp].appendChild(b);
		}
		
		var getData = function(ele,s) {
			var val = ele.textContent; // Nicht im IE8
			if(!isNaN(val) && val.search(/[0-9]/)!=-1) return val;
			var n = val.replace(",",".");
			if(!isNaN(n) && n.search(/[0-9]/)!=-1) return n;
			sorttype[s] = "s"; // String
			return val;
		} // getData

		var vglFkt_s = function(a,b) {
			var as = a[sortiert], bs = b[sortiert];
			if(as>bs) return 1;
			else return -1;
		} // vglFkt_s
		
		var vglFkt_n = function(a,b) {
			return parseFloat(a[sortiert]) - parseFloat(b[sortiert]);
		} // vglFkt_n
		
		var tsort = function(sp) {
			if(sp == sortiert) arr.reverse(); // Tabelle ist schon nach dieser Spalte sortiert, also nur Reihenfolge umdrehen
			else { // Sortieren
				sortiert = sp;
				if(sorttype[sp] == "n") arr.sort(vglFkt_n);
				else arr.sort(vglFkt_s);
			}			
			for(var z=0;z<nzeilen;z++) tbdy.appendChild(arr[z][nspalten]); // Sortierte Daten zurückschreiben
		} // tsort
		
		// Kopfzeile vorbereiten
		for(var i=0;i<titel.length;i++) initTableHead(i) ;
		
		// Array mit Info, wie Spalte zu sortieren ist, vorbelegen
		for(var s=0;s<nspalten;s++) sorttype[s] = "n";
		
		// Tabelleninhalt in ein Array kopieren
		for(var z=0;z<nzeilen;z++) {
			var zelle = tz[z].getElementsByTagName("td"); // cells;
			arr[z] = new Array(nspalten+1);
			arr[z][nspalten] = tz[z];
			for(var s=0;s<nspalten;s++) {
				var zi = getData(zelle[s],s);
				arr[z][s] = zi ;
				// zelle[s].innerHTML += "<br>"+zi+"<br>"+sorttype[s]; // zum Debuggen
			}
		}
		
	} // tableSort


	var initTableSort = function() { 
		var sort_Table = document.querySelectorAll("table.sortierbar");
		for(var i=0;i<sort_Table.length;i++) new tableSort(sort_Table[i]);
	} // initTable

	if(window.addEventListener) window.addEventListener("DOMContentLoaded",initTableSort,false); // nicht im IE8

})();    

		</script>

	</head>

	<body>

		<h1>Beispiel: Tabellensortierer V3</h1>
		<main>

		<table class="sortierbar">
			<thead>
				<tr>
					<th>Lfd. Nr.</th>
					<th>Name</th>
					<th>Punkte</th>
					<th>Note</th>
					<th>Bemerkung</th>
				</tr>
			</thead>
			<tbody>
				<tr>
					<td>1</td>
					<td>Matthias</td>
					<td>9</td>
					<td>2.5</td>
					<td>Normal</td>
				</tr>
				<tr>
					<td>2</td>
					<td>Gunnar</td>
					<td>12</td>
					<td>1.2</td>
					<td><b>Fett</b></td>
				</tr>
				<tr>
					<td>3</td>
					<td>Christian</td>
					<td>8</td>
					<td>3.5</td>
					<td><i>Kursiv</i></td>
				</tr>
				<tr>
					<td>4</td>
					<td>Janosch</td>
					<td>11</td>
					<td>1,4</td>
					<td><a href="#">Link</a></td>
				</tr>
				<tr>
					<td>5</td>
					<td>Raoul</td>
					<td>10</td>
					<td>2.1</td>
					<td><b><a href="#">Fetter Link</a></b></td>
				</tr>
				<tr>
					<td>6</td>
					<td>Jürgen</td>
					<td>7</td>
					<td>3.9</td>
					<td><h2>Überschrift</h2></td>
				</tr>
			</tbody>
			<tfoot>
				<tr>
					<td colspan=5>Stand: 1. 11. 15</td>
				</tr>
			</tfoot>
		</table>

		</main>
		
	</body>
</html>