table的数据行tr上下移动

原文链接:http://www.cnblogs.com/taochen/articles/2344891.html

昨天帮别人解决一个前端页面表格里的数据行上下移动的前端效果,直奔google找了几个demo,发现demo是实现了效果,但是代码很多,最后还是决定自己用jquery写个吧,

首先将前端效果分析出编程逻辑,上下移动就是将数据行互换位置,互换为之前判断是否置顶或则最后一个,翻阅jquery文档发现insertBefore和insertAfter2个函数就可以解决问题,先看我实现的效果吧。

      下图是表格初始状态:


点击上图第二行的“上移”后出现下图效果:


实现效果的JS代码:

<script type="text/javascript">
      /*
      params
      t:触发事件的元素
      oper:操作方式
*/
    function check(t,oper){
        var data_tr=$(t).parent().parent(); //获取到触发的tr
            if(oper=="MoveUp"){    //向上移动
               if($(data_tr).prev().html()==null){ //获取tr的前一个相同等级的元素是否为空
                   alert("已经是最顶部了!");
                   return;
               }{
                    $(data_tr).insertBefore($(data_tr).prev()); //将本身插入到目标tr的前面 
               }
               }else{
                     if($(data_tr).next().html()==null){
                     alert("已经是最低部了!");
                     return;
                 }{
                      $(data_tr).insertAfter($(data_tr).next()); //将本身插入到目标tr的后面 
                 }
               }
    }
</script>

如需同步到数据库中,则在执行insertBefore和insertAfter之前$.ajax将当前的排序和目标数据的排序调换一下,将insertBefore和InsertBefore插入到success:function()中,

如果失败error:function(){alert("移动失败")}。

Html代码:

<style type="text/css">
    table{border-collapse:collapse;}
    table th{width:100px;height:30px;text-align:center;}
    table td{width:100px;height:25px;text-align:center;font-size:14px;}
</style>
</head>

<body>
<div>
<table>
    <thead>
        <tr>
            <th class="ui-widget-header">编号</th>
            <th class="ui-widget-header">姓名</th>
            <th class="ui-widget-header">年龄</th>
            <th class="ui-widget-header">住址</th>
            <th class="ui-widget-header">操作</th>
        </tr>
    </thead>
    <tbody>
    <tr>
            <td class="ui-widget-content">1</td>
        <td class="ui-widget-content">张三</td>
        <td class="ui-widget-content">21<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">湖南</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">2</td>
        <td class="ui-widget-content">李四</td>
        <td class="ui-widget-content">22<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">湖北</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">3</td>
        <td class="ui-widget-content">王五</td>
        <td class="ui-widget-content">34<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">河北</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">4</td>
        <td class="ui-widget-content">赵六</td>
        <td class="ui-widget-content">32<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">河南</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">5</td>
        <td class="ui-widget-content">田七</td>
        <td class="ui-widget-content">38<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">山东</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">6</td>
        <td class="ui-widget-content">戴久</td>
        <td class="ui-widget-content">65<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">北京</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">7</td>
        <td class="ui-widget-content">林十</td>
        <td class="ui-widget-content">45<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">新疆</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">8</td>
        <td class="ui-widget-content">陈坤</td>
        <td class="ui-widget-content">28<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">安徽</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">9</td>
        <td class="ui-widget-content">程斌</td>
        <td class="ui-widget-content">29<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">黑龙江</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
     <tr>
         <td class="ui-widget-content">10</td>
        <td class="ui-widget-content">刘潇</td>
        <td class="ui-widget-content">25<input type="hidden"  name="test" value="111" class="conids"/></td>
        <td class="ui-widget-content">西藏</td>
        <td class="ui-widget-content"><a href="#" οnclick="check(this,'MoveUp')">上移</a>  <a href="#" οnclick="check(this,'MoveDown')">下移</a></td>
    </tr>
  </tbody>
</table>

用Jquery实现代码简便了许多,前段时间开始接触前台继续学习中,如有建议改进请提出你的宝贵意见。






要实现鼠标拖拽上下移动调整el-table的排列顺序,可以使用el-table内置的sortable属性和dragging事件,并结合自定义的拖拽功能。 首先,需要给el-table添加一个自定义的拖拽指示器,用于识别拖拽的起始和目标位置。可以使用HTML5的draggable属性来实现拖拽功能。在el-table中,可以通过scoped slot来自定义的内容。 在模板中,可以这样定义el-table: ```html <el-table :data="tableData" :sortable="true"> <template slot-scope="{ row, $index }"> <tr draggable="true" @dragstart="handleDragStart($event, $index)" @dragover="handleDragOver($event, $index)" @drop="handleDrop($event, $index)" @dragend="handleDragEnd"> <!-- 内容 --> </tr> </template> </el-table> ``` 在这个例子中,我们给每一tr元素添加了draggable属性,并绑定了dragstart、dragover、drop和dragend事件。其中,dragstart事件表示拖拽开始,dragover事件表示拖拽过程中,drop事件表示拖拽结束时放置元素,dragend事件表示拖拽结束。 接下来,在Vue组件中定义相关的事件处理方法: ```javascript methods: { handleDragStart(event, index) { event.dataTransfer.setData('text/plain', index); // 设置被拖动的数据 event.dataTransfer.effectAllowed = 'move'; // 设置拖动的效果 event.target.classList.add('dragging'); // 添加拖动时的样式 }, handleDragOver(event, index) { event.preventDefault(); // 阻止默认为 event.dataTransfer.dropEffect = 'move'; // 设置拖动的效果 }, handleDrop(event, index) { event.preventDefault(); // 阻止默认为 const fromIndex = Number(event.dataTransfer.getData('text/plain')); // 获取被拖动的数据 if (fromIndex !== index) { this.tableData.splice(index, 0, this.tableData.splice(fromIndex, 1)[0]); // 调整数据的位置 } }, handleDragEnd(event) { event.target.classList.remove('dragging'); // 移除拖动时的样式 } } ``` 在handleDragStart方法中,我们使用event.dataTransfer.setData方法来设置被拖动的数据,这里我们将的索引作为数据传递。同时,我们设置了拖动的效果和添加了拖动时的样式。 在handleDragOver方法中,我们通过event.preventDefault方法阻止默认为,并设置了拖动的效果。 在handleDrop方法中,我们通过event.preventDefault方法阻止默认为,并获取被拖动的数据,然后根据拖动的起始和目标位置调整el-table数据的位置。 在handleDragEnd方法中,我们移除了拖动时添加的样式。 最后,可以通过CSS来定义拖动时的样式: ```css tr.dragging { background-color: #f0f0f0; } ``` 这样,就实现了el-table的鼠标拖拽上下移动调整排列顺序的功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值