基本上已解决,就是按钮点击2次或2次以上就不对了,怀疑是传入的TABLE对象没有刷新好奇怪啊,贴代码:
<!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>
<script language="javascript" type="text/javascript">
[].indexOf || (Array.prototype.indexOf = function(v){
for(var i = this.length; i-- && this[i] !== v;);
return i;
});
function resetTable(tbobj,str){
arr = str.split(",");
for(var i=0;i<arr.length;i++){
var iMin = arr[i];
var index = i;
for(var j=i;j<arr.length;j++){
if(iMin>arr[j]){
iMin = arr[j];
index = j;
}
}
iMinch = arr.indexOf(iMin);
iMaxch = arr.indexOf(arr[i]);
alert(iMin + "|" + arr[i])
if (iMinch != iMaxch) changeLie(tbobj,iMinch,iMaxch);
arr.splice(index+1,0,arr[i]);
arr.splice(index,1);
arr.splice(i,1,iMin);
alert(arr)
}
}
function changeLie(tbobj,number1,number2){
var temp =new Array();
var arr=new Array();
myTR=tbobj.rows;
for(i=0;i<myTR.length;i++){
arr[i]=new Array();
temp[i]=new Array();
myTD=myTR[i].cells;
for(j=0;j<myTD.length;j++){
temp[i][j] = myTR[i].cells[number2].innerHTML;
myTR[i].cells[number2].innerHTML = myTR[i].cells[number1].innerHTML;
myTR[i].cells[number1].innerHTML = temp[i][j];
}
}
}
</script>
</head>
<body>
<table border="1px" id="tblTest" onclick="resetTable(this,'5,8,7,2,3,6,1,4,0');">
<TR>
<TD>5</TD>
<TD>8</TD>
<TD>7</TD>
<TD>2</TD>
<TD>3</TD>
<TD>6</TD>
<TD>1</TD>
<TD>4</TD>
<TD>0</TD>
</TR>
<TR>
<TD>张三</TD>
<TD>天天小学</TD>
<TD>二(1)班</TD>
<TD>9</TD>
<TD>男</TD>
<TD>上海</TD>
<TD>喜欢笑</TD>
<TD>35KG</TD>
<TD>团员</TD>
</TR>
<TR>
<TD>李四</TD>
<TD>天兆中学</TD>
<TD>初一(2)班</TD>
<TD>14</TD>
<TD>女</TD>
<TD>上海</TD>
<TD>喜欢哭</TD>
<TD>50KG</TD>
<TD>党员</TD>
</TR>
</table>
<input type="button" value="change" onclick="resetTable(document.getElementById('tbltest'),'5,8,7,2,3,6,1,4,0');">
</body>
</html>
<!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>
<script language="javascript" type="text/javascript">
[].indexOf || (Array.prototype.indexOf = function(v){
for(var i = this.length; i-- && this[i] !== v;);
return i;
});
function resetTable(tbobj,str){
arr = str.split(",");
for(var i=0;i<arr.length;i++){
var iMin = arr[i];
var index = i;
for(var j=i;j<arr.length;j++){
if(iMin>arr[j]){
iMin = arr[j];
index = j;
}
}
iMinch = arr.indexOf(iMin);
iMaxch = arr.indexOf(arr[i]);
alert(iMin + "|" + arr[i])
if (iMinch != iMaxch) changeLie(tbobj,iMinch,iMaxch);
arr.splice(index+1,0,arr[i]);
arr.splice(index,1);
arr.splice(i,1,iMin);
alert(arr)
}
}
function changeLie(tbobj,number1,number2){
var temp =new Array();
var arr=new Array();
myTR=tbobj.rows;
for(i=0;i<myTR.length;i++){
arr[i]=new Array();
temp[i]=new Array();
myTD=myTR[i].cells;
for(j=0;j<myTD.length;j++){
temp[i][j] = myTR[i].cells[number2].innerHTML;
myTR[i].cells[number2].innerHTML = myTR[i].cells[number1].innerHTML;
myTR[i].cells[number1].innerHTML = temp[i][j];
}
}
}
</script>
</head>
<body>
<table border="1px" id="tblTest" onclick="resetTable(this,'5,8,7,2,3,6,1,4,0');">
<TR>
<TD>5</TD>
<TD>8</TD>
<TD>7</TD>
<TD>2</TD>
<TD>3</TD>
<TD>6</TD>
<TD>1</TD>
<TD>4</TD>
<TD>0</TD>
</TR>
<TR>
<TD>张三</TD>
<TD>天天小学</TD>
<TD>二(1)班</TD>
<TD>9</TD>
<TD>男</TD>
<TD>上海</TD>
<TD>喜欢笑</TD>
<TD>35KG</TD>
<TD>团员</TD>
</TR>
<TR>
<TD>李四</TD>
<TD>天兆中学</TD>
<TD>初一(2)班</TD>
<TD>14</TD>
<TD>女</TD>
<TD>上海</TD>
<TD>喜欢哭</TD>
<TD>50KG</TD>
<TD>党员</TD>
</TR>
</table>
<input type="button" value="change" onclick="resetTable(document.getElementById('tbltest'),'5,8,7,2,3,6,1,4,0');">
</body>
</html>
而排序是按照传入数组的内容进行的。
<table border="1px" id="tblTest" onclick="resetTable(this,'5,8,7,2,3,6,1,4,0');">
中的id是tblTest。
是你不小心写错了。哈哈。
另外我建议用FIREFOX + FIREBUG调试JS。定位非常准确!jf
你把resetTable(document.getElementById('tbltest'),'5,8,7,2,3,6,1,4,0')这个函数写死,
当你再点击按纽的时候,rows已经和'5,8,7,2,3,6,1,4,0'这个数组不对应,而是和'0,1,2,3,4,5,6,7,8'对应。
你再认真看看代码吧。