总体思路是在table外部加个div,修改div的innerHtml实现改变tr顺序的效果

具体思路是

获取当前要移动tr行的rowIndex,在table中删除掉,然后循环table的rows,到了目标行再直接加进去,最后把整体的html赋值给div完成效果

js代码如下

        //使行向上一行
function setRowUp(obj) {
if (obj.parentNode.parentNode.rowIndex != 1) {
var tab = obj.parentNode.parentNode.parentNode;
var nowNodeInnerHtml = obj.parentNode.parentNode.innerHTML;
var nowNowIndex = obj.parentNode.parentNode.rowIndex;
tab.deleteRow(nowNowIndex);
var newHtml = "<table cellpadding=\"5\" cellspacing=\"0\">";
newHtml += ("<TR style='font-weight: bold; text-align: center;'>" + tab.rows[0].innerHTML + "</TR>");
for (i = 1; i < tab.rows.length; i++) {
if (i == (nowNowIndex - 1)) {
newHtml += ("<TR>" + nowNodeInnerHtml + "</TR>");
}
newHtml += ("<TR>" + tab.rows[i].innerHTML + "</TR>");
}
newHtml += "</table>";
document.getElementById("divContent").innerHTML = newHtml;
}
}
//使行向下一行
function setRowDown(obj) {
if (obj.parentNode.parentNode.rowIndex != (document.getElementById("divContent").childNodes[0].rows.length - 1)) {
var tab = obj.parentNode.parentNode.parentNode;
var nowNodeInnerHtml = obj.parentNode.parentNode.innerHTML;
var nowNowIndex = obj.parentNode.parentNode.rowIndex;
tab.deleteRow(nowNowIndex);
var newHtml = "<table cellpadding=\"5\" cellspacing=\"0\">";
newHtml += ("<TR style='font-weight: bold; text-align: center;'>" + tab.rows[0].innerHTML + "</TR>");
for (i = 1; i < tab.rows.length; i++) {
if (i == (nowNowIndex + 1)) {
newHtml += ("<TR>" + nowNodeInnerHtml + "</TR>");
}
newHtml += ("<TR>" + tab.rows[i].innerHTML + "</TR>");
}
//向下可能到表格现有行数外 额外处理
if (tab.rows.length == (nowNowIndex + 1)) {
newHtml += ("<TR>" + nowNodeInnerHtml + "</TR>");
}
newHtml += "</table>";
document.getElementById("divContent").innerHTML = newHtml;
}
}

测试html代码如下

<body>
<div id="divContent">
<table cellpadding="5" cellspacing="0">
<tr style='font-weight: bold; text-align: center;'><td>工号</td><td>姓名</td></tr>
<tr><td>0001
<input type="button" value="↑" onclick="setRowUp(this)" />
<input type="button" value="↓" onclick="setRowDown(this)" />
</td><td>姓名01</td></tr>
<tr><td>0002
<input type="button" value="↑" onclick="setRowUp(this)" />
<input type="button" value="↓" onclick="setRowDown(this)" />
</td><td>姓名02</td></tr>
<tr><td>0003
<input type="button" value="↑" onclick="setRowUp(this)" />
<input type="button" value="↓" onclick="setRowDown(this)" />
</td><td>姓名03</td></tr>
<tr><td>0004
<input type="button" value="↑" onclick="setRowUp(this)" />
<input type="button" value="↓" onclick="setRowDown(this)" />
</td><td>姓名04</td></tr>
<tr><td>0005
<input type="button" value="↑" onclick="setRowUp(this)" />
<input type="button" value="↓" onclick="setRowDown(this)" />
</td><td>姓名05</td></tr>
</table>
</div>
</body>

js操作table中tr的顺序,实现上移下移一行的效果的更多相关文章

  1. 05_jquery 操作table使tr(数据)整行上移下移

    1:ajax请求数据到页面 function GetWorkSpaceList() { GetServerData("get", GetEnterpriseUrl() + &quo ...

  2. js在table指定tr行上或底下添加tr行

    js在table指定tr行上或下面添加tr行 function onAddTR(trIndex)         {             var tb = document.getElementB ...

  3. table中tr使用toggle不好,选择换一张方式

    好几次遇到的问题,都是table中tr后面有一部分内容要显示,也是用tr装的,但是需要点击该行,后面那个tr才显示出来.不过最好不要用toggle去写,因为着实效果不佳.故而建议换一种方式,也许最简单 ...

  4. 第十三篇 JS 操作table表格

    JS 操作table表格 这节课难度可能高一点,因为没有提前解释if判断.for循环.这节课是直接把这两样用上了,老师先简单介绍一下: if,判断语句,判断就很简单了嘛,假如说1=1(1等于1),当然 ...

  5. js导出table中的EXCEL总结

    导出EXCEL通常是用PHP做,可是项目中,有时候PHP后端project师返回的数据不是我们想要的,作为前端开发project师,把相应的数据编号转换为文字后,展示给用户.可是.需求要把数据同一时候 ...

  6. 【2017-06-29】在登录页面自动返回上次请求页面、Js获取table中的行数与列数

    一.在登录页面自动返回上次请求页面 Request.UrlReferrer比如 if (Request.UrlReferrer != null) { //如果能获取来路地址 Response.Redi ...

  7. JS移动li行数据,点击上移下移(是位置的互换,不是top的偏移量改变)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. js的传值,table中tr的遍历,js中动态创建数组

    1.这里关键是对页面中的传值,其次是动态的创建一个数组,用来存值 $(val).css("background-color", "rgb(251, 248, 233)&q ...

  9. js操作table倒叙显示序号的问题

    今天遇到一奇葩问题,就是在js添加table时,序号是倒叙显示的,而且数据库查出来时正序的,为什么显示是倒叙的呢? 我百度一番,终于有了结果: var newRow=table.insertRow(- ...

随机推荐

  1. Django(七)

    一.ModelForm操作及验证 1.class Meta:class Meta: #注意以下字段不能加逗号 model = models.UserInfo #这里的all代指所用的字段,也可以是一个 ...

  2. Thread和ThreadGroup

    Thread和ThreadGroup 学习了:https://www.cnblogs.com/yiwangzhibujian/p/6212104.html  这个里面有Thread的基本内容: htt ...

  3. Codeforces Round #FF (Div. 2) D. DZY Loves Modification 贪心+优先队列

    链接:http://codeforces.com/problemset/problem/447/D 题意:一个n*m的矩阵.能够进行k次操作,每次操作室对某一行或某一列的的数都减p,获得的得分是这一行 ...

  4. Java中Void占位符的測试及个人理解

    Java对Void类的说明是:Void 类是一个不可实例化的占位符类,它保持一个对代表 Java keyword void 的 Class 对象的引用. 代表的是: 代表主要的 Java 类型 voi ...

  5. ReflectionSugar 通用反射类

    http://www.cnblogs.com/sunkaixuan/p/4635710.html

  6. Swift 3 关于Date的一些操作

    前言 最近在写关于日期的一些操作,所以整理了一下这方面的一些知识 本Demo使用的是playground. 我们以前使用的都是NSDate类进行日期的操作,在Swift 3.0中,我们就可以使用更加S ...

  7. 【Codeforces 258E】 Devu and Flowers

    [题目链接] http://codeforces.com/contest/451/problem/E [算法] 容斥原理 [代码] #include<bits/stdc++.h> usin ...

  8. B1734 [Usaco2005 feb]Aggressive cows 愤怒的牛 二分答案

    水题,20分钟AC,最大值最小,一看就是二分答案... 代码: Description Farmer John has built a <= N <= ,) stalls. The sta ...

  9. 转四种常见的post请求

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...

  10. EOJ 2822 内存显示

    一个 int 类型变量或 double 类型变量在连续几个字节的内存中存放.读取数值时,当数值中包含小数点时类型为 double,否则类型为 int.将读入的数值存放在 int 类型变量或 doubl ...