西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)javascript|JQuery → 使用jquery對表格排序代碼實例

使用jquery對表格排序代碼實例

相關軟件相關文章發(fā)表評論 來源:西西整理時間:2012/12/16 13:38:05字體大小:A-A+

作者:西西點擊:0次評論:0次標簽: 表格

  • 類型:辦公軟件大。22.3M語言:中文 評分:2.5
  • 標簽:
立即下載

很多高手也位jquery寫了專門的排序庫,因為自己也想嘗試一下, 當然運行速度實在不能接受,但是我會慢慢的把他改進的。 
注:這里只是拿出了一部分代碼來,查看演示demo 

文檔載入后給'th'添加click事件。 
1. 
$('th').click(function(){ 
var date1=(new Date()).getTime() 
var dataType=$(this).attr('dataType'); 
找到點擊對象的自定義屬性dataType,當然這個不符合W3C的標準是無法通過檢驗的,也可以用ID或者class來定義,但是我覺得這樣直觀點在Transitional模式下也可以正常解讀. 
2. 
var index=$('th').index(this)+1; 
找到被點擊對象在文檔中的位置加上1,加1是為了給所對應的列的td添加樣式才做的。 
因為用:eq()只能得到td的全文檔位置,而用:nth-child()的話得到的是每個td在自己的父元素里面的序列位置。 
3. 
var row=$('tbody tr'); 
將tbody里所有tr存到變量row. 
4. 
$.each(row,function(i){ arr[i]=row[i] }) 
遍歷所有行講它插入arr數(shù)組. 

5.if($(this).hasClass('select')){arr.reverse()} 
如果這個'th'被點擊過那么它將會被添加select樣式,如果是這樣直接將原來的arr數(shù)組反向。 
6. 
else { 
arr.sort(sortStr(index,dataType)) 
$('.select').removeClass(); 
$('td:nth-child('+index+')').addClass('select'); 
$(this).addClass('select') 

否則,將arr用sort()方法進行排序sort()方式可以接受1個函數(shù),這個函數(shù)接受2個參數(shù)作為需要比較的數(shù)據(jù),我在這里定義為 
sortStr(); 
它有兩個參數(shù): 

代碼如下:


function sortStr(index,dataType){ 
return function(a,b){ 
var aText=$(a).find('td:nth-child('+index+')').text(); 
var bText=$(b).find('td:nth-child('+index+')').text(); 

if(dataType!='roomType'){ 
aText=Parse(aText,dataType) 
bText=Parse(bText,dataType) 
return aText>;bText?-1:bText>;aText?1:0; 


else return aText.localeCompare(bText) 



第一個是index,它是在click事件中獲得的變量,這個變量包含了被點擊的那個'th'的在文檔中的位置是一個數(shù)字, 
jquert的index()方法獲得對象的位置,這個位置從0算起,這個例子中有6個'th'; 

第二個參數(shù)是dataType,他包含每個'th'的屬性值。 

sortStr()里面包含了一個比較的函數(shù),這個函數(shù)是匿名函數(shù),它有2個參數(shù)每個參數(shù)代表著一個'tbody tr',(在這里a和b代表需要比較的tr)這兩個參數(shù)是在包含他的函數(shù)環(huán)境中獲取的,sort()方法里面的參數(shù),在這是一個函數(shù),這個函數(shù)都會獲得數(shù)組對象的元素, 
這個匿名函數(shù)返回對操作數(shù)組的引用。 
arr里面包含的一個數(shù)組,每個數(shù)組的值包含對tbody里面的tr的引用,排序函數(shù)按照返回的值對原有數(shù)組里面的元素直接進行位置的改變, 

var aText=$(a).find('td:nth-child('+index+')').text(); 
獲取需要比較的行里面其中一個td里面包含的文本這個就是需要比較的值, 
click事件中得到的index變量成為參數(shù)傳遞到這里就是為了得到th所對應的td的位置; 

代碼如下:
if(dataType!='roomType'){ 
aText=Parse(aText,dataType) 
bText=Parse(bText,dataType) 
return aText>;bText?-1:bText>;aText?1:0; 

如果需要排序的類型是不包含了數(shù)字和字母的話,(因為擁有roomType值的元素所包含了數(shù)字和字母),將獲得的td里面的文本值和dataType傳遞到 
Parse()里面進行轉(zhuǎn)換, 

代碼如下:
function Parse(data,dataType){ 
switch(dataType){ 
case 'num': 
return parseFloat(data)||0 
case 'date': 
return Date.parse(data)||0 
default : 
return splitStr(data) 

如果是數(shù)字類型直接轉(zhuǎn)換為浮點數(shù), 

return parseFloat(data)||0 
要是出現(xiàn)了布恩那個轉(zhuǎn)換的對象字符串那么返回0;因為這個文檔里面有一個NaN這個是無法轉(zhuǎn)換的,所以返回的是0; 

如果是日期類型可以用Date.parse直接轉(zhuǎn)換為數(shù)字,這個轉(zhuǎn)換是從1970年到轉(zhuǎn)換參數(shù)的時間, 
這個時間轉(zhuǎn)換我試了試可以精確到秒的,比如說1971/01/2 18:12:20、01/2/1970 18:12:20寫法都可以轉(zhuǎn)換; 
之后 

return aText>;bText?-1:bText>;aText?1:0; 
返回比較值aText比bText大返回一個小于0的任何數(shù)字都可以,相反返回一個正數(shù),如果都不是的話返回0;如果不是日期也不是數(shù)字(在這個文檔中目前只能轉(zhuǎn)換3中數(shù)據(jù):1.日期。2.數(shù)字。3.字符串和數(shù)字一起的), 
default : 
return splitStr(data) 
我把他放到splitStr()里面進行轉(zhuǎn)換 

splitStr()的內(nèi)容如下: 

代碼如下:

function splitStr(data){ 
var re=/^[\$a-zA-z\u4e00-\u9fa5 ]*(.*?)[a-zA-z\u4e00-\u9fa5 ]*$/ 
data=data.replace(re,'$1') 
return parseFloat(data) 

正則表達式:分為三部分 1部分^[a-zA-Z ]*;中間部分(.*?);結(jié)尾部分[a-zA-Z ]*$ 
可以這樣看/ /是包含塊 , 
第一部分 ^表示目標字符串開頭,[]之間表示A-Z無論大小寫都被忽略掉,里面還有個空格,*表示它左邊[]里面的內(nèi)容可以出現(xiàn)任意次數(shù); 
中間部分 ()是個分組 ,分組內(nèi)容會被放置到RegExp的第一項中'$1′,'.'匹配所有(除了空格)*?懶惰方式; 
最后部分 []之間與后面的*和第一部分是一樣的都是去掉字母,$表示結(jié)尾部分; 
\$表示匹配$號 

代碼如下:

function sortStr(index,dataType){ 
return function(a,b){ 
var aText=$(a).find('td:nth-child('+index+')').text(); 
var bText=$(b).find('td:nth-child('+index+')').text(); 
if(dataType!='roomType'){ 
aText=Parse(aText,dataType) 
bText=Parse(bText,dataType) 
return aText>;bText?-1:bText>;aText?1:0; 

else return aText.localeCompare(bText) 

否則 直接使用localeCompare進行比較,這個是專門對字符串進行比較的方法,如:字符串'a'比字符串'b'排在26的單詞的前面;返回的依然是大于0的數(shù),負數(shù)和0; 

代碼最開頭部分的 new Date和結(jié)束部分的new Date是計算表格排序時間的,這個時間會在最中間那個'th'的'span'標記里面顯示出來,這樣是為了測試整個表格排序從排序開始到排序結(jié)束所花費的時間。 

完整代碼:http://pan.baidu.com/share/link?shareid=197592&uk=85241834

    表格下載
    (17)表格下載
    跟等軟件是我們?nèi)粘^k公學習常用的軟件,有時候我們需要制作一份報表或者個人簡歷時就需要用軟件來制作一個相關的表格模板。這些模板其實網(wǎng)上有很多網(wǎng)友分享的縣城模板,西西給大家提供了各種精美的表格下載。...更多>>

    相關評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數(shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)
    推薦文章

    沒有數(shù)據(jù)