MediaWiki:Common.js
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 Ctrl+F5 oder Ctrl+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Ctrl+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Ctrl+F5 drücken oder Ctrl drücken und gleichzeitig Aktualisieren anklicken
- Opera: Ctrl+F5
Das ist ein hervorragendes Projekt! MediaWiki bietet von Haus aus zwar die sortable-Funktion, aber echtes Filtern wie in Excel erfordert in der Tat ein wenig JavaScript-Magie.
Da MediaWiki die jQuery-Bibliothek standardmäßig lädt, nutzen wir diese, um eine schlanke und performante Lösung zu bauen.
Die Lösung: Ein dynamischer Header-Filter
Dieser Code fügt automatisch ein Eingabefeld in jede Spalte einer Tabelle ein, die die Klasse filterable besitzt.
1. Das JavaScript
Kopiere diesen Code in deine Seite MediaWiki:Common.js:
JavaScript
$(function() {
// Suche nach Tabellen mit der Klasse "filterable"
$('table.filterable').each(function() {
var $table = $(this);
var $headerRow = $table.find('tr').first();
var $filterRow = $('<tr class="filter-row"></tr>');
// Erstelle für jede Header-Zelle ein Eingabefeld
$headerRow.find('th').each(function() {
var $filterCell = $('<th></th>');
var $input = $('<input type="text" placeholder="Filtern..." style="width: 100%; box-sizing: border-box;" />');
$input.on('keyup change', function() {
filterTable($table);
});
$filterCell.append($input);
$filterRow.append($filterCell);
});
// Füge die Filter-Zeile unter dem Header ein
$headerRow.after($filterRow);
});
function filterTable($table) {
var $rows = $table.find('tr').not(':first').not('.filter-row');
var $inputs = $table.find('.filter-row input');
$rows.each(function() {
var $row = $(this);
var showRow = true;
$inputs.each(function(index) {
var filterValue = $(this).val().toLowerCase();
var cellValue = $row.find('td').eq(index).text().toLowerCase();
if (filterValue && cellValue.indexOf(filterValue) === -1) {
showRow = false;
return false; // Break loop
}
});
$row.toggle(showRow);
});
}
});