Rumah hujung hadapan web tutorial js 表头固定(利用jquery实现原理介绍)_jquery

表头固定(利用jquery实现原理介绍)_jquery

May 16, 2016 pm 05:48 PM
tetap Kepala

表头固定应该是一个用得比较多的功能,参考了网上几个例子,在几个常用浏览器下显示不是很完美。而且很多都是基于固定的表格,在编码时多写一个固定的表头,对于动态生成的不知道多少列的表格就无从下手。而且例子中大多只能满足限定高度的情况,如果限定宽度,出现横向滚动条就无能为力了。

我的目的就是要像jquery-ui那样,找到页面上存在的表格,调用一个方法就可以实现固定表头的功能。趁着动手学习写jquery插件的机会,自己写了一个表头固定的插件。
使用方式和jquery-ui中的插件一样,只需要一行代码 $('#table1').fixHeader({height:100});

下列浏览器测试通过
IE7 IE8 firefox16.0 chrome22.0
目前已知IE9下列不能对齐,手头暂时没有IE9来调试,以后再想法解决。

说明:
1 需要jquery,开发测试用的jquery-1.8.2,其他版本应该不大
2 表头部分的

需要写在里
3 不限定宽度情况下,自动适应表格宽度(假设滚动条宽度为20px,实际宽度为表格宽度+20px)
4 支持多行表头固定
5 通常表格所有列都显示,无横向滚动条,只需要竖向滚动条的功能。该插件支持限定宽度条件下的表头固定。
6 限定宽度和高度的条件下固定表头显示时,表头固定功能无法单纯通过css来实现,需要通过js实现,会有轻微闪烁
7 已经考虑table和th,td的border-width设置成不同值的情况
8 已经考虑了表头中绑定的事件,原表头中绑定的事件仍然保留

特别注意:IE浏览器下,一定要设置表格中td和th的border-width,否则无法正确设置列宽,表头和数据部分会错位
使用方法:
限定高度:$('#table1').fixHeader({height:100});
限定高度和宽度:$('#table3').fixHeader({height:100,width:500});

下面为完整代码
复制代码 代码如下:

/*!
* fixHeader 1.0.0
* Copyright 2012 chokobo
*
* make table header fixed
*
* notice: set th,id border-width in IE
*
* tested browser: IE7 IE8 firefox16.0 chrome22.0
*/
(function( $, undefined ) {

$.fn.fixHeader = function(options){
var defaults = {
width: '',
height: ''

};

options = $.extend({}, defaults, options);
var elem = this;

if(options.height == ''){
return this;
}

var thead = elem.find('thead');
var fixTable = elem.clone().empty().removeAttr('id');
//set head default background-color
if(fixTable.css('background-color') == 'transparent' || fixTable.css('background-color') == ''){
fixTable.css('background-color', '#fff');
}
fixTable.css({
'position': 'absolute',
'top': '0px',
'border-bottom': $('tr:eq(0)', thead).find('th:eq(0), td:eq(0)').css('border-bottom-width')
});


$('tr:eq(0)', thead).find('th, td').each(function(){
var col = $(this);

if($.browser.mozilla){
col.width(col.width());
}
else if($.browser.chrome){
var colBorderWidth = parseInt(col.css('border-width'));
col.width(col.width()+colBorderWidth);
}
else if($.browser.msie){
var colBorderWidth = parseInt(col.css('border-width'));
if(colBorderWidth){
col.width(col.width()+colBorderWidth+colBorderWidth/2);//IE7??
}
}
});

//make head
var dummyHead = thead.clone();
thead.appendTo(fixTable);
dummyHead.prependTo(elem);


var tbodyWrapper = elem.wrap('
').parent();
var tableWrapper = tbodyWrapper.wrap('
').parent();
setTableWidth();
setWrapperSize();

fixTable.prependTo(tableWrapper);

return this;

function setTableWidth(){
if($.browser.mozilla){
elem.width(elem.width());
fixTable.css('width',elem.css('width'));
}
else if($.browser.chrome){
elem.width(elem.outerWidth());
fixTable.width(elem.outerWidth());
}
else if($.browser.msie){
elem.width(elem.outerWidth());
fixTable.width(elem.outerWidth());
}
else{
elem.width(elem.outerWidth());
fixTable.width(elem.outerWidth());
}
}
function setWrapperSize(){
var elemWidth = elem.outerWidth(true);
var elemHeight = elem.outerHeight(true);
var scrollBarWidth = 20;

if(options.width == ''){
tbodyWrapper.css({
'width': (elemWidth+scrollBarWidth) + 'px',
'height': options.height,
'overflow-x': 'hidden',
'overflow-y': 'auto'
});
}
else{
if(elemWidth tbodyWrapper.css({
'width': options.width+'px',
'height': options.height,
'overflow-x': 'hidden',
'overflow-y': 'auto'
});
}
else{
tableWrapper.css({
'width': options.width,
'height': options.height,
'overflow': 'auto'
});
tableWrapper.scroll(function(){
fixTable.css('top',tableWrapper.scrollTop()+'px');
});
}
}
}
};

})( jQuery );

复制代码 代码如下:

/*
功能:固定表頭。
使用容器的ID進行設定$("#div").chromatable({width: "100%",height: "100%", scrolling: "yes"})
table必須包含有標籤
參數:無。
*/
(function($){
$.chromatable = {
defaults: {
width: "900px", //設定容器寬度,待擴展程式
height: "300px", //設定容器高度,待擴展程式
scrolling: "yes" //yes跟隨IE滾動條而滑動, no固定在頁面上僅容器滾動條滑動
}
};
$.fn.chromatable = function(options){
var options = $.extend({}, $.chromatable.defaults, options);
return this.each(function(){
var $divObj = $(this);
var $tableObj = $divObj.find("table");
var $uniqueID = $tableObj.attr("ID") + ("wrapper");
var $class = $tableObj.attr("class");
var $tableWidth = $tableObj.width();
var top = $("#"+$tableObj.attr("ID")).offset().top;
var left = $("#"+$tableObj.attr("ID")).offset().left
$divObj.append(""+$("#"+$tableObj.attr("ID")).find("thead").html()+"
");

$.each($("#"+$tableObj.attr("ID")).find("thead th"), function(i,item){
$("#"+$uniqueID).find("thead th").eq(i).width($(item).width());
$(item).width($(item).width());
});

if(options.scrolling === "yes")
{
scrollEvent($tableObj.attr("ID"), $uniqueID);
}
resizeEvent($tableObj.attr("ID"), $uniqueID);
});

function scrollEvent(tableId, uniqueID)
{
var element = $("#"+uniqueID);
$(window).scroll(function(){
var top = $("#"+tableId).offset().top;
var scrolls = $(this).scrollTop();

if (scrolls > top) {
if (window.XMLHttpRequest) {
element.css({
position: "fixed",
top: 0
});
} else {
element.css({
top: scrolls
});
}
}else {
element.css({
position: "absolute",
top: top
});
}

});
};

function resizeEvent(tableId, uniqueID)
{
var element = $("#"+uniqueID);
$(window).resize(function(){
var top = $("#"+tableId).offset().top;
var scrolls = $(this).scrollTop();
if (scrolls > top) {
if (window.XMLHttpRequest) {
element.css({
position: "fixed",
top: 0
});
} else {
element.css({
top: scrolls
});
}
}else {
element.css({
position: "absolute",
top: top
});
}
});
}
};
})(jQuery);

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menetapkan kertas dinding skrin kunci komputer yang tidak akan berubah Bagaimana untuk menetapkan kertas dinding skrin kunci komputer yang tidak akan berubah Jan 17, 2024 pm 03:24 PM

Secara umumnya, corak latar belakang desktop komputer boleh dilaraskan oleh pengguna. Walau bagaimanapun, bagi sesetengah pengguna Windows 10, mereka mahu dapat membetulkan imej latar belakang desktop pada komputer mereka, tetapi mereka tidak tahu cara untuk menetapkannya. Malah, ia sangat mudah dan mudah dikendalikan. Cara membetulkan kertas dinding skrin kunci komputer tanpa mengubahnya 1. Klik kanan gambar yang anda ingin tetapkan dan pilih Tetapkan sebagai gambar latar belakang 2. Win+R untuk membuka dan menjalankan, kemudian masukkan "gpedit.msc" 3. Kembangkan ke: Konfigurasi Pengguna - Templat Pengurusan - Panel Kawalan - Pemperibadian 4. Klik Pemperibadian, dan kemudian pilih "Cegah perubahan pada latar belakang desktop" 5. Pilih Didayakan 6. Kemudian buka tetapan dan masukkan latar belakang Apabila anda melihat perkataan kecil ini, ia bermakna ia telah ditetapkan.

Tukar cakera tetap VirtualBox kepada cakera dinamik dan sebaliknya Tukar cakera tetap VirtualBox kepada cakera dinamik dan sebaliknya Mar 25, 2024 am 09:36 AM

Apabila mencipta mesin maya, anda akan diminta untuk memilih jenis cakera, anda boleh memilih cakera tetap atau cakera dinamik. Bagaimana jika anda memilih cakera tetap dan kemudian menyedari bahawa anda memerlukan cakera dinamik, atau sebaliknya. Anda boleh menukar satu kepada yang lain? Dalam siaran ini, kita akan melihat cara menukar cakera tetap VirtualBox kepada cakera dinamik dan sebaliknya. Cakera dinamik ialah cakera keras maya yang pada mulanya mempunyai saiz kecil dan membesar dalam saiz semasa anda menyimpan data dalam mesin maya. Cakera dinamik sangat cekap dalam menjimatkan ruang storan kerana ia hanya mengambil sebanyak mungkin ruang storan hos seperti yang diperlukan. Walau bagaimanapun, apabila kapasiti cakera berkembang, prestasi komputer anda mungkin terjejas sedikit. Cakera tetap dan cakera dinamik biasanya digunakan dalam mesin maya

Cara memastikan panel widget sentiasa kelihatan dalam Windows 11 Cara memastikan panel widget sentiasa kelihatan dalam Windows 11 Aug 13, 2023 pm 07:13 PM

Bagaimana untuk sentiasa menunjukkan papan widget semasa membuka Windows 11? Nah, anda boleh mulakan dengan memuat turun dan memasang kemas kini Windows terkini. Dalam tampung kemas kini terbaharu untuk Program Insider, Microsoft mendedahkan bahawa pengguna dalam saluran Pembangunan dan Canary akan dapat menyemat papan widget terbuka supaya ia sentiasa kelihatan sepintas lalu. Cara Sentiasa Tunjukkan Papan Widget Terbuka dalam Windows 11 Menurut Microsoft, untuk menyemat papan untuk dibuka, cuma klik pada ikon tekan tekan di sudut kanan atas papan. Setelah papan anda disematkan terbuka, papan widget tidak akan mengabaikan penutupan lagi. Semasa papan disematkan, anda masih boleh menutupnya dengan membuka papan widget melalui butang Widget pada bar tugas. apabila widget

Bagaimana untuk menyematkan nota komputer pada desktop Bagaimana untuk menyematkan nota komputer pada desktop Feb 15, 2024 pm 04:00 PM

Sistem pengendalian Windows 10 prabenam dengan fungsi nota yang mudah supaya pengguna yang dihargai boleh menulis nota atau mesej sementara mengikut kehendak mereka. Katakan anda ingin menggunakan ini sebagai alat untuk mencari dan menggunakan nota melekit dengan cepat dan mudah, atau anda ingin menyematkan program kecil praktikal ini di tengah-tengah skrin besar untuk rujukan mudah Anda boleh merealisasikan hasrat di atas hanya dalam beberapa perkara mudah langkah: Cara menyemat nota melekit pada komputer anda Pada desktop 1. Klik Mula dan kemudian klik nota lekit di sini 2. Selepas membuka nota lekat, anda boleh terus memasukkan kandungan yang sepadan di sini, dan anda juga boleh mengklik tanda tambah di atas untuk menambah kandungan baharu 3. Jika anda ingin menggunakan pihak ketiga Jika anda mempunyai perisian pengambilan nota, anda boleh memasukkan tetapan perisian yang sepadan untuk beroperasi.

Bagaimana untuk menyelesaikan masalah bahawa menu permulaan win11 tidak boleh diperbaiki Bagaimana untuk menyelesaikan masalah bahawa menu permulaan win11 tidak boleh diperbaiki Jan 06, 2024 pm 08:09 PM

Ramai rakan suka membuka perisian secara terus dalam menu mula, yang memerlukan terus menyematkan aplikasi padanya Namun, mereka mendapati bahawa mereka tidak boleh disematkan ke menu mula dalam win11 Ini mungkin kerana kami salah lihat kaedah yang betul di bawah. Apa yang perlu dilakukan jika menu mula win11 tidak boleh diperbaiki 1. Mula-mula, kita klik butang carian dalam bar tugas di bawah. 2. Selepas membukanya, cari aplikasi yang anda ingin pin di bahagian atas, dan apabila anda menemuinya, klik "Sematkan ke Skrin Mula" di sebelah kanan. 3. Tunggu sistem memaparkan ikon untuk menyemat gesaan. 4. Selepas selesai, anda akan mendapati bahawa program yang dipilih telah disematkan ke menu mula.

Analisis had dan sebab kedudukan tetap dalam HTML Analisis had dan sebab kedudukan tetap dalam HTML Dec 28, 2023 am 08:20 AM

Analisis batasan dan sebab kedudukan tetap dalam HTML Dalam pembangunan Web, kedudukan tetap (kedudukan:tetap) ialah kaedah susun atur yang biasa digunakan, yang boleh menjadikan elemen tetap relatif kepada viewport dan tidak terjejas oleh perubahan dalam kedudukan elemen lain. . Walau bagaimanapun, kedudukan tetap juga mempunyai had khusus, yang diterangkan secara terperinci di bawah, bersama dengan contoh kod yang sepadan. Dijejaskan oleh keserasian penyemak imbas: Penyemak imbas yang berbeza mempunyai tahap sokongan yang berbeza untuk kedudukan tetap dan beberapa versi penyemak imbas yang lebih lama mungkin tidak dapat menghuraikan kedudukan tetap dengan betul.

Bagaimana untuk memilih seni bina kedudukan tetap yang sesuai dan cekap Bagaimana untuk memilih seni bina kedudukan tetap yang sesuai dan cekap Dec 28, 2023 pm 01:27 PM

Cara memilih struktur kedudukan tetap pantas yang sesuai memerlukan contoh kod khusus Dalam pembangunan perisian moden, kedudukan tetap pantas adalah fungsi yang sangat penting. Sama ada reka bentuk web, pembangunan aplikasi mudah alih atau sistem terbenam, kita semua perlu dapat menentukan elemen atau objek yang perlu dimanipulasi. Struktur kedudukan tetap yang baik bukan sahaja dapat meningkatkan kecekapan pembangunan, tetapi juga meningkatkan pengalaman pengguna. Artikel ini menerangkan cara memilih struktur kedudukan tetap pantas yang sesuai dan menyediakan contoh kod khusus. Pertama, kita perlu menjelaskan definisi kedudukan tetap pantas. Betulkan cepat

Penyelesaian kepada bar navigasi Vue membetulkan masalah Penyelesaian kepada bar navigasi Vue membetulkan masalah Jun 30, 2023 am 10:52 AM

Cara menangani masalah bar navigasi tetap yang dihadapi dalam pembangunan Vue Apabila membangunkan halaman web, kesan tetap bar navigasi adalah keperluan yang sangat biasa. Semasa pengguna menatal halaman, bar navigasi boleh kekal dalam kedudukan tetap supaya pengguna boleh mengakses bahagian lain halaman dengan mudah. Walau bagaimanapun, dalam pembangunan Vue, disebabkan struktur aplikasi satu halaman khasnya, masalah membetulkan bar navigasi mungkin sedikit berbeza. Dalam artikel ini, kami akan memperkenalkan beberapa kaedah untuk menangani masalah tetap bar navigasi yang dihadapi dalam pembangunan Vue. Kaedah 1: Gunakan CSS untuk menetapkan kedudukan (posit

See all articles