jQuery & Table 解析

jQuery && Table

    这中示例网上是很多的,这个示例是书上的例子,觉得有点价值,就保存到我的博客里了。希望和大家一起学习,共同完善这个示例,做成一个jQuery插件,可以满足我们通常对表格的需求。先看看这个效果:

2011010517534672.png

    我将源码贴在这里,代码有注释,并且会持续更新,若有疑问也可以留言或直接Email我。

ContractedBlock.gif ExpandedBlockStart.gif Head
 
   
<% @ Page Language = " C# " AutoEventWireup = " true " CodeBehind = " jQuery.aspx.cs " Inherits = " Web.jQuery " %>

<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

< html xmlns ="http://www.w3.org/1999/xhtml" >
< head runat ="server" >
< title > jQuery Table </ title >

 

ContractedBlock.gif ExpandedBlockStart.gif CSS
 
   
<style type="text/css">
thead
{
background-color
: Blue ;
color
: White ;
}
tr.odd
{
background-color
: #ddd ;
}
tr.even
{
background-color
: #eee ;
}
.clickable
{
text-decoration
: underline ;
}
.hover
{
background-color
: #5dd354 ;
}
.sorted
{
background-color
: #ded070 ;
}
.page-number
{
color
: Black ;
margin
: 2px 10px ;
padding
: 2px 5px ;
}
.active
{
border
: solid 1px red ;
background-color
: #76a7d2 ;
}
.pager
{
margin-bottom
: 10px ;
margin-left
: 20px ;
}
</style>

 

ContractedBlock.gif ExpandedBlockStart.gif Scripts
 
   
< script type = " text/javascript " src = " scripts/jQuery/jquery-1.4.3.min.js " >< / script>
< script type = " text/javascript " >
$(
function () {
jQuery.fn.alternateRowColors
= function () { // 做成插件的形式
$( ' tbody tr:odd ' , this ).removeClass( ' even ' ).addClass( ' odd ' ); // 隔行变色 奇数行
$( ' tbody tr:even ' , this ).removeClass( ' odd ' ).addClass( ' even ' ); // 隔行变色 偶数行
return this ;
};

$(
' table.myTable ' ).each( function () {
var $table = $( this ); // 将table存储为一个jquery对象
$table.alternateRowColors($table); // 在排序时隔行变色

$(
' th ' , $table).each( function (column) {
var findSortKey;
if ($( this ).is( ' .sort-alpha ' )) { // 按字母排序
findSortKey = function ($cell) {
return $cell.find( ' sort-key ' ).text().toUpperCase() + '' + $cell.text().toUpperCase();
};
}
else if ($( this ).is( ' .sort-numeric ' )) { // 按数字排序
findSortKey = function ($cell) {
var key = parseFloat($cell.text().replace( / ^[^\d.]* / , '' ));
return isNaN(key) ? 0 : key;
};
}
else if ($( this ).is( ' .sort-date ' )) { // 按日期排序
findSortKey = function ($cell) {
return Date.parse( ' 1 ' + $cell.text());
};
}

if (findSortKey) {
$(
this ).addClass( ' clickable ' ).hover( function () { $( this ).addClass( ' hover ' ); }, function () { $( this ).removeClass( ' hover ' ); }).click( function () {

// 反向排序状态声明
var newDirection = 1 ;
if ($( this ).is( ' .sorted-asc ' )) {
newDirection
= - 1 ;
}

var rows = $table.find( ' tbody>tr ' ).get(); // 将数据行转换为数组
$.each(rows, function (index, row) {
row.sortKey
= findSortKey($(row).children( ' td ' ).eq(column));
});
rows.sort(
function (a, b) {
if (a.sortKey < b.sortKey) return - newDirection;
if (a.sortKey > b.sortKey) return newDirection;
return 0 ;
});
$.each(rows,
function (index, row) {
$table.children(
' tbody ' ).append(row);
row.sortKey
= null ;
});

$table.find(
' th ' ).removeClass( ' sorted-asc ' ).removeClass( ' sorted-desc ' );

var $sortHead = $table.find( ' th ' ).filter( ' :nth-child( ' + (column + 1 ) + ' ) ' );

// 实现反向排序
if (newDirection == 1 ) {
$sortHead.addClass(
' sorted-asc ' );
}
else {
$sortHead.addClass(
' sorted-desc ' );
}

// 调用隔行变色的函数
$table.alternateRowColors($table);
// 移除已排序的列的样式,添加样式到当前列
$table.find( ' td ' ).removeClass( ' sorted ' ).filter( ' :nth-child( ' + (column + 1 ) + ' ) ' ).addClass( ' sorted ' );
$table.trigger(
' repaginate ' );
});
}
});
});
});
// 分页
$( function () {
$(
' table.paginated ' ).each( function () {
var currentPage = 0 ;
var numPerPage = 10 ;
var $table = $( this );
$table.bind(
' repaginate ' , function () {
$table.find(
' tbody tr ' ).hide().slice(currentPage * numPerPage, (currentPage + 1 ) * numPerPage).show();
});

var numRows = $table.find( ' tbody tr ' ).length;
var numPages = Math.ceil(numRows / numPerPage);

var $pager = $( ' <div class="pager"></div> ' );
for ( var page = 0 ; page < numPages; page ++ ) {
$(
' <span class="page-number"></span> ' ).text(page + 1 )
.bind(
' click ' , { newPage: page }, function (event) {
currentPage
= event.data[ ' newPage ' ];
$table.trigger(
' repaginate ' );
$(
this ).addClass( ' active ' ).siblings().removeClass( ' active ' );
}).appendTo($pager).addClass(
' clickable ' );
}
$pager.insertBefore($table);
$table.trigger(
' repaginate ' );
$pager.find(
' span.page-number:first ' ).addClass( ' active ' );
});
});
< / script>

 

ContractedBlock.gif ExpandedBlockStart.gif Content
 
   
</ head >
< body >
< form id ="form1" runat ="server" >
< div >
< table class ="myTable paginated" >
< thead >
< tr >
< th class ="sort-alpha" >
Last Name
</ th >
< th class ="sort-alpha" >
First Name
</ th >
< th >
Email
</ th >
< th class ="sort-numeric" >
Due
</ th >
< th class ="sort-date" >
Date
</ th >
< th >
Web Site
</ th >
</ tr >
</ thead >
< tbody >
< tr >
< td >
Smith
</ td >
< td >
John
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Smith
</ td >
< td >
John
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Smith
</ td >
< td >
John
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Smith
</ td >
< td >
John
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Smith
</ td >
< td >
John
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Song
</ td >
< td >
Stone
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Li
</ td >
< td >
Nate
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Xu
</ td >
< td >
Susie
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Bose
</ td >
< td >
Arijit
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Shen
</ td >
< td >
Gary
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Li
</ td >
< td >
Marry
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Xiang
</ td >
< td >
Raymond
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Wang
</ td >
< td >
Leona
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Kummmer
</ td >
< td >
Sasi
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Huang
</ td >
< td >
Dannier
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Smith
</ td >
< td >
John
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >
< tr >
< td >
Smith
</ td >
< td >
John
</ td >
< td >
jsmith@gmail.com
</ td >
< td >
$50.00
</ td >
< td >
Mar 2009
</ td >
< td >
http://www.jsmith.com
</ td >
</ tr >

</ tbody >
</ table >
</ div >
</ form >
</ body >
</ html >

转载于:https://www.cnblogs.com/Dannier/articles/1926580.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值