
已解决问题
谷歌dfrvdyt用户在2016.04.20提交了关于“七宗罪J**aScript实现表格排序方法”的提问,欢迎大家涌跃发表自己的观点。目前共有1个回答,最后更新于2025-02-27T04:33:23。希望大家能够帮助她。详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !
详细问题描述及疑问:期待您的答案,没有什么华丽的语言,但是我对你的感谢不会减少 !
参考
复制代码代码如下:
<!
<htmlxmlns="http://www.***.org/1999/xht
<head>
<me
<title>J**aScript控制网页内表格排序</t
<style>
*{font-fa
body{text-align:center;}
table{ma
td{width:100px;height:24px;te
.red{color:red;}
.to
.up{background
.down{background:#FFFFCCurl(down.gif)no-
.
</st
</head>
<b
<tablecellp
<trclass
<tr>
<t
<tdclass="red">700</td>
<td>1.220</td>
<tdclass="red">www.***.cn</td>
</tr>
<tr><td><spanid="bfn_la_c.usa">7.05</span></td>
<tdclass="red">4</td>
<td>3,000</td>
<tdclass="red">asp</td>
</tr>
<tr><td><spanid="bfn_la_jpm.usa">30.62</span></td>
<tdclass="red">30</td>
<td>2,558,800</td>
<tdclass="red">php</td>
</tr>
<tr>
<td><spanid="bfn_la_axp.usa">22.30</span></td>
<tdclass="red">5</td><td>6</td>
<tdclass="red">js</td>
</tr>
<tr><td><spanid="bfn_la_mrk.usa">26.31</span></td>
<tdclass="red">0.6</td><td>5</td>
<tdclass="red">网站开发</td>
</tr>
<tr><td><spanid="bfn_la_pg.usa">63.16</span></td>
<tdclass="red">7</td><td>4</td>
<tdclass="red">子</td>
</tr>
</table>
<scripttype="text/j**ascript">
vartableSort=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的二维数组
this.setShow();
},
//设置标签切换
setShow:function(){
vardefaultClass=this.Tags[0].className;
for(varTag,i=0;Tag=this.Tags[i];i++){
Tag.index=i;
addEventListener(Tag,'click',Bind(Tag,statu));
}
var_this=this;
varturn=0;
functionstatu(){
for(vari=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;
}
}
},
//设置选中列样式
colClassSet:function(**m,cla){
//得到关联到的td
for(vari=(this.startRow-1);i<(this.endRow);i++){
for(varn=0;n<this.rows[i].cells.length;n++){
removeClass(this.rows[i].cells[n],cla);
}
addClass(this.rows[i].cells[**m],cla);
}
},
//开始排序**m根据第几列排序aord逆序还是顺序
startArray:function(aord,**m){
varafterSort=this.sortMethod(this.T2Arr,aord,**m);//排序后的二维数组传到排序方法中去
this.array2Td(**m,afterSort);//输出
},
//将受影响的行和列转换成二维数组
_td2Array:function(){
vararr=[];
for(vari=(this.startRow-1),l=0;i<(this.endRow);i++,l++){
arr[l]=[];
for(varn=0;n<this.rows[i].cells.length;n++){
arr[l].push(this.rows[i].cells[n].innerh**TML);
}
}
returnarr;
},
//根据排序后的二维数组来输出相应的行和列的innerh**TML
array2Td:function(**m,arr){
this.colClassSet(**m,this.selectClass);
for(vari=(this.startRow-1),l=0;i<(this.endRow);i++,l++){
for(varn=0;n<this.Tags.length;n++){
this.rows[i].cells[n].innerh**TML=arr[l][n];
}
}
},
//传进来一个二维数组,根据二维数组的子项中的w项排序,再返回排序后的二维数组
sortMethod:function(arr,aord,w){
//vareffectCol=this.getColByNum(whichCol);
arr.sort(function(a,b){
x=killh**TML(a[w]);
y=killh**TML(b[w]);
x=x.replace(/,/g,'');
y=y.replace(/,/g,'');
switch(isNaN(x)){
casefalse:
returnNumber(x)-Number(y);
bre**;
casetrue:
returnx.localeCompare(y);
bre**;
}
});
arr=aord==0?arr:arr.reverse();
returnarr;
}
}
/*-----------------------------------*/
functionaddEventListener(o,type,fn){
if(o.attachEvent){o.attachEvent('on'+type,fn)}
elseif(o.addEventListener){o.addEventListener(type,fn,false)}
else{o['on'+type]=fn;}
}
functionhasClass(element,className){
varreg=newRegExp('(\\s|^)'+className+'(\\s|$)');
returnelement.className.match(reg);
}
functionaddClass(element,className){
if(!this.hasClass(element,className))
{
element.className+=""+className;
}
}
functionremoveClass(element,className){
if(hasClass(element,className)){
varreg=newRegExp('(\\s|^)'+className+'(\\s|$)');
element.className=element.className.replace(reg,'');
}
}
varBind=function(object,fun){
returnfunction(){
returnfun.apply(object,arguments);
}
}
//去掉所有的html标记
functionkillh**TML(str){
returnstr.replace(/<[^>]+>/g,"");
}
//------------------------------------------------
//tableid第几行是标签行,从第几行开始排序,第几行结束排序(999表示最后)升序标签样式,降序标签样式选中列样式
//注意标签行的class应该是一致的
varex1=newtableSort('table',1,2,999,'up','down','hov');
</script>
<br><br>
</body>
</html>