Situation: Eine Seite mit einer Tabelle mit mehreren Zeilen. Ich möchte thead beheben, wenn thead den oberen Rand der Seite beim Scrollen erreichen, mit jquery oder irgendeinem gegebenen Scripting. Ich möchte nicht den Tisch selbst überlaufen.Fix thead auf Seite blättern
Antwort
Sie Lobstrosity den Code mit einer geringfügigen Änderung verwenden können: position: fixed
statt absolute
.
position: fixed
ist jetzt weit verbreitet von allen Browsern einschließlich IE8 und höher übernommen. BTW fixed macht auf mobilen/Tablet-Geräten viel schöner als position: absolute
.
fand ich, dass auf einem Tisch mit dynamischen Breiten für jede Spalte, die absolut < Thead positioniert> würde die Breite der restlichen Spalten verlieren, so dass dies zu beheben ich mit dem folgenden Code kam:
Was dieser Code tut, ist wie folgt:
Bestimmt die Breite der einzelnen Spalten in der Tabelle durch die CSS-Breite der ersten < tbody Nachschlagen> < tr> < td> Zeile und diese in einem Array zu speichern für später . Wenn der Benutzer scrollt, wird die Klasse 'fixed' zur < thead> hinzugefügt (das Standardverhalten des Browsers wird die Breite der <e th 's ändern und sie werden nicht mit der < tbody> übereinstimmen. Um das also rückwirkend zu beheben Setzen Sie die Breiten der < th> auf die Werte, die wir zuvor gelesen haben.
Auf jeden Fall hier ist der Code:
CSS
table.entries {width: 100%;border-spacing: 0px;margin:0;}
table.entries thead.fixed {position:fixed;top:0;}
HTML
<table class="entries" id="entriestable">
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Location</th>
<th>DOB</th>
<th>Opt in</th>
<th>Added</th>
</tr>
</thead>
<tbody>
<tr>
<td class="name">Ricky Bobby</td>
<td>[email protected]</td>
<td class="addy"><i>Kent, GB</i></td>
<td class="dob">20/08/1984</td>
<td>Yes</td>
<td class="date">4 hours ago</td>
</tr>
</tbody>
</table>
JavaScript
TableThing = function(params) {
settings = {
table: $('#entriestable'),
thead: []
};
this.fixThead = function() {
// empty our array to begin with
settings.thead = [];
// loop over the first row of td's in <tbody> and get the widths of individual <td>'s
$('tbody tr:eq(1) td', settings.table).each(function(i,v){
settings.thead.push($(v).width());
});
// now loop over our array setting the widths we've got to the <th>'s
for(i=0;i<settings.thead.length;i++) {
$('thead th:eq('+i+')', settings.table).width(settings.thead[i]);
}
// here we attach to the scroll, adding the class 'fixed' to the <thead>
$(window).scroll(function() {
var windowTop = $(window).scrollTop();
if (windowTop > settings.table.offset().top) {
$("thead", settings.table).addClass("fixed");
}
else {
$("thead", settings.table).removeClass("fixed");
}
});
}
}
$(function(){
var table = new TableThing();
table.fixThead();
$(window).resize(function(){
table.fixThead();
});
});
Wenn Sie mehrere Tabellen haben, müssen Sie die '# entriesstable' ID als Parameter übergeben und die lokalen Variableneinstellungen in der Funktion' var settings = {table: $ (params.id), thead: []} 'deklarieren – matteospampani
Hier ist etwas, das Art von funktioniert (schnell in FF 3.5, Chrome 3 und IE 8 getestet), die Sie möglicherweise auf Ihre Bedürfnisse anpassen können.
Es verwendet absolute Positionierung des thead
. Wenn der thead
absolut positioniert wird, entfernt dies im Grunde genommen ihn aus dem ursprünglichen Fluss des table
und die Breiten aller tbody
td
s entsprechend anzupassen. Sie erhalten also ein hässliches Verhalten, wenn Sie keine Spaltenbreiten angeben oder wenn der Spaltenkopf einer Spalte breiter ist als jede andere Zelle in dieser Spalte.
CSS
#Grid thead.Fixed
{
position: absolute;
}
HTML
<table id="Grid">
<thead>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<!-- etc. -->
</tbody>
</table>
jQuery
$(function() {
var table = $("#Grid");
$(window).scroll(function() {
var windowTop = $(window).scrollTop();
if (windowTop > table.offset().top) {
$("thead", table).addClass("Fixed").css("top", windowTop);
}
else {
$("thead", table).removeClass("Fixed");
}
});
});
bemerkte ich, dass es nicht in IE funktioniert u Nless Sie eine strenge XHTML-Doctype angeben:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<!-- etc. -->
Ja, ich fing an, eine feste Position zu verwenden, und dieses hässliche Verhalten brachte mich zu fragen für eine Lösung hier, um Zeit zu sparen. Jetzt ist Ihr die Lösung! Danke. – egidiocs
(function ($) {
$.fn.fixedHeader = function() {
return this.filter('table').each(function() {
var that = this;
var $head = $('<div></div>').addClass('head');
$(this).before($head);
$('th', this).each(function() {
var $el = $(this);
var $div = $('<div></div>').width($el.outerWidth()).text(
$el.text());
$head.append($div);
});
$(window).on('scroll', function() {
var $that = $(that);
var w = $(window).scrollTop();
var o = $('th', that).first().offset().top;
var tableO = $that.offset().top + $that.height();
if (o < w && tableO > w) {
$head.show();
} else {
$head.hide();
}
});
});
};
})(jQuery);
Sie können dieses jquery-Plugin verwenden (Sie müssen den .head-Stil an Ihren thead-Stil anpassen). Arbeitsbeispiel hier: http://jsfiddle.net/lukasi/7K52p/1/
- 1. Fix Tabelle thead
- 2. Fix einen Tisch Thead
- 3. div auf Seite blättern
- 4. Tabelle: Fix thead während Scroll
- 5. Wie blättern Sie eine Taste auf der Seite blättern
- 6. Animierte Blättern auf Seite Up/Down Ereignis
- 7. Notepad ++ Seite blättern auf Registerkarte wechseln
- 8. Verwaltung Seite blättern auf jquery Daten anhängen
- 9. Position klebrig auf thead
- 10. Wiederholen Sie thead auf jeder Seite über htmldoc
- 11. $ ionicScrollDelegate.scrollTop Einfrieren der Seite blättern
- 12. Fix Div auf Bildschirm
- 13. Fix Whitespace am Ende der Seite
- 14. Erstellen eines klebrigen Headers auf einem Thead
- 15. Anzeige: Tabelle, fügen Sie eine weitere thead über Spalte thead
- 16. den aktiven Menüpunkt auf der Seite Blättern markieren?
- 17. Blättern Sie zu bestimmten div auf Seite laden
- 18. Holen Sie die Position von div auf Seite blättern
- 19. Android Swap/Edit Symbolleiste auf der Seite blättern in ViewPager
- 20. Kann nicht anhalten Seite blättern mit e.preventDefault();
- 21. Horizontale Seite blättern in Chrome mobilen Browser
- 22. iOS Fix Suchleiste oben auf dem UITableViewController?
- 23. Glatte natürliche Bewegung, wenn Seite blättern
- 24. Selen: Blättern Sie bis Ende der Seite
- 25. thead/tbody spanning auf mehreren Seiten von gedruckten HTML, aber nicht auf der ersten Seite
- 26. Einfügen th in thead
- 27. IE7 THEAD Tag Styling
- 28. Verstecke/Zeige Spalte einer Tabelle mit thead und tbody, thead an falscher Stelle gezeigt
- 29. Fix jQuery Scrollen
- 30. CSS zu PDF, mit THEAD für die Wiederholung Header auf der neuen Seite
Ich schrieb ein Plugin, das dies mit festen oder absoluten Position tut. Während der Code in der Antwort für die * that * -Tabelle funktioniert, funktioniert er nicht für alle vielen Tabellen, z. B. Tabellen mit Colspans oder ausgeblendeten Spalten. Versuchen Sie dies stattdessen: http://mkoryak.github.io/floatThead/ – mkoryak
https://github.com/karaxuna/fixed-table-header – karaxuna