<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
</table>
如题,用JS 如何把 A行 移动到 B行的下方?
9 个解决方案
#1
要定义临时行才行
var tr=document.createElement("tr")
这样
类似排序
var tr=document.createElement("tr")
这样
类似排序
#2
问题补充下:
如果只移动一行,还好处理,但是如果要移动多行的话就比较麻烦。
例如
<table>
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>A.1</td><td>name</td><td>detail</td></tr>
<tr><td>A.2</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>B.1</td><td>name</td><td>detail</td></tr>
<tr><td>B.2</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>C.1</td><td>name</td><td>detail</td></tr>
<tr><td>C.2</td><td>name</td><td>detail</td></tr>
</table>
如果是 互换 A类行 和 B类行 这种多行移动 又如何处理?
如果只移动一行,还好处理,但是如果要移动多行的话就比较麻烦。
例如
<table>
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>A.1</td><td>name</td><td>detail</td></tr>
<tr><td>A.2</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>B.1</td><td>name</td><td>detail</td></tr>
<tr><td>B.2</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>C.1</td><td>name</td><td>detail</td></tr>
<tr><td>C.2</td><td>name</td><td>detail</td></tr>
</table>
如果是 互换 A类行 和 B类行 这种多行移动 又如何处理?
#3
<html>
<head>
<script type="text/javascript">
function exchange() {
var tb = document.getElementById("tb");
var tr = tb.rows[0];
tb.tBodies[0].appendChild(tr);
}
</script>
</head>
<body>
<table id="tb">
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
</table>
<button onclick="exchange()">Exchange</button>
</body>
</html>
#4
++
这样就可以了,既然是移动,不用create
#5
先谢谢三楼
但该方法 只是把 移动行 追加到 表的最后。
不符合我的需求。
我要做的是,把1或N行,移动到 指定的位置,并非都追加到表的最后
但该方法 只是把 移动行 追加到 表的最后。
不符合我的需求。
我要做的是,把1或N行,移动到 指定的位置,并非都追加到表的最后
#6
<html>
<head>
<script type="text/javascript">
var currentNum = 1;
function up() {
if (currentNum > 0) {
var tb = document.getElementById("tb");
var currentRow = tb.rows[currentNum];
var tr = tb.insertRow(--currentNum);
var len = currentRow.cells.length;
for (var i = 0; i < len; i++) {
tr.appendChild(currentRow.cells[0]);
}
tb.tBodies[0].removeChild(currentRow);
tr.style.backgroundColor = "blue";
tr.style.color = "white";
}
}
function down() {
var tb = document.getElementById("tb");
var rowLength = tb.rows.length;
if (currentNum < rowLength - 1) {
var currentRow = tb.rows[currentNum];
var tr = tb.insertRow(currentNum + 2);
var len = currentRow.cells.length;
for (var i = 0; i < len; i++) {
tr.appendChild(currentRow.cells[0]);
}
tb.tBodies[0].removeChild(currentRow);
tr.style.backgroundColor = "blue";
tr.style.color = "white";
currentNum++;
}
}
</script>
</head>
<body>
<table id="tb">
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr style="background-color:blue; color: white;"><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>D</td><td>name</td><td>detail</td></tr>
<tr><td>E</td><td>name</td><td>detail</td></tr>
</table>
<button onclick="up()"> Up </button>
<button onclick="down()">Down</button>
</body>
</html>
#7
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
//beginRow:要移动的起始行位置 ,如:要从第一行开始移动,则为1
//endRow,要移动的起始行位置
//nsertRow,插入行的位置
//type:0为在nsertRow之前插入,1为在nsertRow之后插入
function moveRows(tableid,beginRow,endRow,insertRow,type){
var oTable=document.getElementById(tableid);
//存放行的数组
var aTrs=[];
if(oTable){
//存放插入行的引用
var iRow=oTable.tBodies[0].rows[insertRow-1];
for(var i=beginRow-1;i<endRow;i++){
aTrs.push(oTable.tBodies[0].rows[i])
}
//创建文档碎片
var oFragment=document.createDocumentFragment();
for(var j=0;j<aTrs.length;j++){
oFragment.appendChild(aTrs[j])
}
if(type==0)
oTable.tBodies[0].insertBefore(oFragment,iRow);
else
oTable.tBodies[0].insertBefore(oFragment,iRow.nextSibling);
}
else{
alert('id错误');
}
}
</script>
</head>
<body>
<table id="tb">
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>D</td><td>name</td><td>detail</td></tr>
<tr><td>E</td><td>name</td><td>detail</td></tr>
<tr><td>F</td><td>name</td><td>detail</td></tr>
</table>
<input type="button" value="将第二至第四行移动到第六行前" onclick="moveRows('tb',2,3,6,1)"/>
</body>
</html>
#8
晕 刚才昨晚测试 忘记把字改回来了 那个button改一下
<input type="button" value="将第二至第3行移动到第六行前" onclick="moveRows('tb',2,3,6,0)"/>
<input type="button" value="将第二至第3行移动到第六行前" onclick="moveRows('tb',2,3,6,0)"/>
#9
还有一个条件没做判断
起始行>0&&结束行>0&&插入行>0&&起始行<结束行&&结束行<=整个table的行数
插入行 <起始行|| (插入行>结束行 &&插入行<整个table的行数)
起始行>0&&结束行>0&&插入行>0&&起始行<结束行&&结束行<=整个table的行数
插入行 <起始行|| (插入行>结束行 &&插入行<整个table的行数)
#1
要定义临时行才行
var tr=document.createElement("tr")
这样
类似排序
var tr=document.createElement("tr")
这样
类似排序
#2
问题补充下:
如果只移动一行,还好处理,但是如果要移动多行的话就比较麻烦。
例如
<table>
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>A.1</td><td>name</td><td>detail</td></tr>
<tr><td>A.2</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>B.1</td><td>name</td><td>detail</td></tr>
<tr><td>B.2</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>C.1</td><td>name</td><td>detail</td></tr>
<tr><td>C.2</td><td>name</td><td>detail</td></tr>
</table>
如果是 互换 A类行 和 B类行 这种多行移动 又如何处理?
如果只移动一行,还好处理,但是如果要移动多行的话就比较麻烦。
例如
<table>
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>A.1</td><td>name</td><td>detail</td></tr>
<tr><td>A.2</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>B.1</td><td>name</td><td>detail</td></tr>
<tr><td>B.2</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>C.1</td><td>name</td><td>detail</td></tr>
<tr><td>C.2</td><td>name</td><td>detail</td></tr>
</table>
如果是 互换 A类行 和 B类行 这种多行移动 又如何处理?
#3
<html>
<head>
<script type="text/javascript">
function exchange() {
var tb = document.getElementById("tb");
var tr = tb.rows[0];
tb.tBodies[0].appendChild(tr);
}
</script>
</head>
<body>
<table id="tb">
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
</table>
<button onclick="exchange()">Exchange</button>
</body>
</html>
#4
++
这样就可以了,既然是移动,不用create
#5
先谢谢三楼
但该方法 只是把 移动行 追加到 表的最后。
不符合我的需求。
我要做的是,把1或N行,移动到 指定的位置,并非都追加到表的最后
但该方法 只是把 移动行 追加到 表的最后。
不符合我的需求。
我要做的是,把1或N行,移动到 指定的位置,并非都追加到表的最后
#6
<html>
<head>
<script type="text/javascript">
var currentNum = 1;
function up() {
if (currentNum > 0) {
var tb = document.getElementById("tb");
var currentRow = tb.rows[currentNum];
var tr = tb.insertRow(--currentNum);
var len = currentRow.cells.length;
for (var i = 0; i < len; i++) {
tr.appendChild(currentRow.cells[0]);
}
tb.tBodies[0].removeChild(currentRow);
tr.style.backgroundColor = "blue";
tr.style.color = "white";
}
}
function down() {
var tb = document.getElementById("tb");
var rowLength = tb.rows.length;
if (currentNum < rowLength - 1) {
var currentRow = tb.rows[currentNum];
var tr = tb.insertRow(currentNum + 2);
var len = currentRow.cells.length;
for (var i = 0; i < len; i++) {
tr.appendChild(currentRow.cells[0]);
}
tb.tBodies[0].removeChild(currentRow);
tr.style.backgroundColor = "blue";
tr.style.color = "white";
currentNum++;
}
}
</script>
</head>
<body>
<table id="tb">
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr style="background-color:blue; color: white;"><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>D</td><td>name</td><td>detail</td></tr>
<tr><td>E</td><td>name</td><td>detail</td></tr>
</table>
<button onclick="up()"> Up </button>
<button onclick="down()">Down</button>
</body>
</html>
#7
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript">
//beginRow:要移动的起始行位置 ,如:要从第一行开始移动,则为1
//endRow,要移动的起始行位置
//nsertRow,插入行的位置
//type:0为在nsertRow之前插入,1为在nsertRow之后插入
function moveRows(tableid,beginRow,endRow,insertRow,type){
var oTable=document.getElementById(tableid);
//存放行的数组
var aTrs=[];
if(oTable){
//存放插入行的引用
var iRow=oTable.tBodies[0].rows[insertRow-1];
for(var i=beginRow-1;i<endRow;i++){
aTrs.push(oTable.tBodies[0].rows[i])
}
//创建文档碎片
var oFragment=document.createDocumentFragment();
for(var j=0;j<aTrs.length;j++){
oFragment.appendChild(aTrs[j])
}
if(type==0)
oTable.tBodies[0].insertBefore(oFragment,iRow);
else
oTable.tBodies[0].insertBefore(oFragment,iRow.nextSibling);
}
else{
alert('id错误');
}
}
</script>
</head>
<body>
<table id="tb">
<tr><td>A</td><td>name</td><td>detail</td></tr>
<tr><td>B</td><td>name</td><td>detail</td></tr>
<tr><td>C</td><td>name</td><td>detail</td></tr>
<tr><td>D</td><td>name</td><td>detail</td></tr>
<tr><td>E</td><td>name</td><td>detail</td></tr>
<tr><td>F</td><td>name</td><td>detail</td></tr>
</table>
<input type="button" value="将第二至第四行移动到第六行前" onclick="moveRows('tb',2,3,6,1)"/>
</body>
</html>
#8
晕 刚才昨晚测试 忘记把字改回来了 那个button改一下
<input type="button" value="将第二至第3行移动到第六行前" onclick="moveRows('tb',2,3,6,0)"/>
<input type="button" value="将第二至第3行移动到第六行前" onclick="moveRows('tb',2,3,6,0)"/>
#9
还有一个条件没做判断
起始行>0&&结束行>0&&插入行>0&&起始行<结束行&&结束行<=整个table的行数
插入行 <起始行|| (插入行>结束行 &&插入行<整个table的行数)
起始行>0&&结束行>0&&插入行>0&&起始行<结束行&&结束行<=整个table的行数
插入行 <起始行|| (插入行>结束行 &&插入行<整个table的行数)