MediaWiki:Common.js: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Rbritt (Diskussion | Beiträge) Die Seite wurde neu angelegt: «→Das folgende JavaScript wird für alle Benutzer geladen.: →Tabellen-Filter-Skript: mw.loader.using('jquery.makeCollapsible').done(function() { $(function() { // Suche alle Tabellen mit der Klasse "filterable" $('table.filterable').each(function() { var $table = $(this); var $input = $('<input type="text" placeholder="Tabelle filtern..." style="margin-bottom: 5px; padding: 5px; width: 200px; border: 1px so…» |
Rbritt (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 1: | Zeile 1: | ||
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); | |||
}); | |||
} | |||
}); | }); | ||
Version vom 24. Februar 2026, 08:01 Uhr
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);
});
}
});