JS實現(xiàn)HTML表格排序功能
更新時間:2016年08月05日 09:31:48 作者:taogege2016
這篇文章主要為大家詳細介紹了JS實現(xiàn)HTML表格排序功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了JavaScript實現(xiàn)HTML表格排序功能,供大家參考,具體內(nèi)容如下
HTML代碼:
<table cellpadding="0" id="table">
<tr class="top">
<td>click me</td>
<td>click me</td>
<td>click me</td>
<td>click me</td>
</tr>
<tr>
<td>
<span id="bfn_la_bac.usa">15.43</span>
</td>
<td class="red">700</td>
<td>1.220</td>
<td class="red">阿</td>
</tr>
<tr>
<td>
<span id="bfn_la_c.usa">7.05</span>
</td>
<td class="red">4</td>
<td>3,000</td>
<td class="red">炳</td>
</tr>
<tr>
<td>
<span id="bfn_la_jpm.usa">30.62</span>
</td>
<td class="red">30</td>
<td>2,558,800</td>
<td class="red">和</td>
</tr>
<tr>
<td>
<span id="bfn_la_axp.usa">22.30</span>
</td>
<td class="red">5</td>
<td>6</td>
<td class="red">瞎</td>
</tr>
<tr>
<td>
<span id="bfn_la_mrk.usa">26.31</span>
</td>
<td class="red">0.6</td>
<td>5</td>
<td class="red">-</td>
</tr>
<tr>
<td>
<span id="bfn_la_pg.usa">63.16</span>
</td>
<td class="red">7</td>
<td>4</td>
<td class="red">子</td>
</tr>
</table>
JavaScirpt代碼:
var tableSort = function(){
this.initialize.apply(this,arguments);
}
tableSort.prototype = {
initialize : function(tableId,clickRow,startRow,endRow,classUp,classDown,selectClass){
this.Table = document.getElementById(tableId);
this.rows = this.Table.rows;//所有行
this.Tags = this.rows[clickRow-1].cells;//標簽td
this.up = classUp;
this.down = classDown;
this.startRow = startRow;
this.selectClass = selectClass;
this.endRow = (endRow == 999? this.rows.length : endRow);
this.T2Arr = this._td2Array();//所有受影響的td的二維數(shù)組
this.setShow();
},
//設(shè)置標簽切換
setShow:function(){
var defaultClass = this.Tags[0].className;
for(var Tag ,i=0;Tag = this.Tags[i];i++){
Tag.index = i;
addEventListener(Tag ,'click', Bind(Tag,statu));
}
var _this =this;
var turn = 0;
function statu(){
for(var i=0;i<_this.Tags.length;i++){
_this.Tags[i].className = defaultClass;
}
if(turn==0){
addClass(this,_this.down)
_this.startArray(0,this.index);
turn=1;
}else{
addClass(this,_this.up)
_this.startArray(1,this.index);
turn=0;
}
}
},
//設(shè)置選中列樣式
colClassSet:function(num,cla){
//得到關(guān)聯(lián)到的td
for(var i= (this.startRow-1);i<(this.endRow);i++){
for(var n=0;n<this.rows[i].cells.length;n++){
removeClass(this.rows[i].cells[n],cla);
}
addClass(this.rows[i].cells[num],cla);
}
},
//開始排序 num 根據(jù)第幾列排序 aord 逆序還是順序
startArray:function(aord,num){
var afterSort = this.sortMethod(this.T2Arr,aord,num);//排序后的二維數(shù)組傳到排序方法中去
this.array2Td(num,afterSort);//輸出
},
//將受影響的行和列轉(zhuǎn)換成二維數(shù)組
_td2Array:function(){
var arr=[];
for(var i=(this.startRow-1),l=0;i<(this.endRow);i++,l++){
arr[l]=[];
for(var n=0;n<this.rows[i].cells.length;n++){
arr[l].push(this.rows[i].cells[n].innerHTML);
}
}
return arr;
},
//根據(jù)排序后的二維數(shù)組來輸出相應(yīng)的行和列的 innerHTML
array2Td:function(num,arr){
this.colClassSet(num,this.selectClass);
for(var i= (this.startRow-1),l=0;i<(this.endRow);i++,l++){
for(var n=0;n<this.Tags.length;n++){
this.rows[i].cells[n].innerHTML = arr[l][n];
}
}
},
//傳進來一個二維數(shù)組,根據(jù)二維數(shù)組的子項中的w項排序,再返回排序后的二維數(shù)組
sortMethod:function(arr,aord,w){
arr.sort(function(a,b){
x = killHTML(a[w]);
y = killHTML(b[w]);
x = x.replace(/,/g,'');
y = y.replace(/,/g,'');
switch (isNaN(x)){
case false:
return Number(x) - Number(y);
break;
case true:
return x.localeCompare(y);
break;
}
});
arr = aord==0?arr:arr.reverse();
return arr;
}
}
/*-----------------------------------*/
function addEventListener(o,type,fn){
if(o.attachEvent){
o.attachEvent('on'+type,fn);
}else if(o.addEventListener){
o.addEventListener(type,fn,false);
}else{
o['on'+type] = fn;
}
}
function hasClass(element, className) {
var reg = new RegExp('(\s|^)'+className+'(\s|$)');
return element.className.match(reg);
}
function addClass(element, className) {
if (!this.hasClass(element, className)) {
element.className += " "+className;
}
}
function removeClass(element, className) {
if (hasClass(element, className)) {
var reg = new RegExp('(\s|^)'+className+'(\s|$)');
element.className = element.className.replace(reg,' ');
}
}
var Bind = function(object, fun) {
return function() {
return fun.apply(object, arguments);
}
}
//去掉所有的html標記
function killHTML(str){
return str.replace(/<[^>]+>/g,"");
}
//------------------------------------------------
//tableid 第幾行是標簽行,從第幾行開始排序,第幾行結(jié)束排序(999表示最后) 升序標簽樣式,降序標簽樣式 選中列樣式
//注意標簽行的class應(yīng)該是一致的
var ex1 = new tableSort('table',1,2,999,'up','down','hov');
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- Sortable.js拖拽排序使用方法解析
- react.js組件實現(xiàn)拖拽復(fù)制和可排序的示例代碼
- javascript實現(xiàn)表格排序 編輯 拖拽 縮放
- JS+CSS制作DIV層可(最小化/拖拽/排序)功能實現(xiàn)代碼
- js 表格排序(編輯+拖拽+縮放)
- javascript 表格排序和表頭浮動效果(擴展SortTable)
- jquery tablesorter.js 支持中文表格排序改進
- JS實現(xiàn)點擊表頭表格自動排序(含數(shù)字、字符串、日期)
- javascript-表格排序(降序/反序)實現(xiàn)介紹(附圖)
- Auntion-TableSort國人寫的一個javascript表格排序的東西
- JS拖拽排序插件Sortable.js用法實例分析
相關(guān)文章
JS的時間格式化和時間戳轉(zhuǎn)換函數(shù)示例詳解
這篇文章主要介紹了JS的時間格式化和時間戳轉(zhuǎn)換函數(shù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07
jquery獲取URL中參數(shù)解決中文亂碼問題的兩種方法
從A頁面通過url傳參到B頁面時,獲取URL中參數(shù)出現(xiàn)中文亂碼問題,解析url參數(shù)的正確方法如下,感興趣的朋友可以參考下2013-12-12
uniapp自定義網(wǎng)絡(luò)檢測組件項目實戰(zhàn)總結(jié)分析
這篇文章主要為大家介紹了uniapp自定義網(wǎng)絡(luò)檢測組件項目實戰(zhàn)總結(jié)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09

