如何在通过jquery删除行后重新计算html表中的序列号

时间:2015-08-08 06:54:10

标签: jquery html

我有以下表格布局:

<table border="1" id="staff">
  <tr><th>S/N</th><th>Company</th><th>Contact</th><th>Country</th></tr>
  <tr id="1"><td>1</td><td>Futter</td><td>Anders</td<td>Germany</td></tr>
  <tr id="2"><td>2</td><td>Berglunds</td><td>Christina</td<td>Sweden</td></tr>
  <tr id="5"><td>3</td><td>Centro</td><td>Francisco</td<td>Mexico</td></tr>
  <tr id="8"><td>4</td><td>Handel</td><td>Roland</td<td>Austria</td></tr>     
</table>

现在,按下删除按钮后,一个jquery函数将tr id发布到处理php页面,并在成功完成php&amp; mysqli删除操作,处理php页面向表页面发送回调消息。然后jquery函数从html表中删除结果行:

$("body").on("click",".del",function(event){
   event.preventDefault();
   var table= 'staff';
   var id = $(this).closest('tr').attr('id'); 
       $.post(url,
        {
         table: tbl,
         trid: id,
        },function(data){
          var callback_msg = data.return_msg;
          if(callback_msg=='delete'){
            $('#'+id).remove();
          }
       });
});

所以,如果用户希望删除tr id为5的第3行,删除该行后,S / N列保持不变,如下所示:

<table border="1" id="staff">
  <tr><th>S/N</th><th>Company</th><th>Contact</th><th>Country</th></tr>
  <tr id="1"><td>1</td><td>Futter</td><td>Anders</td<td>Germany</td></tr>
  <tr id="2"><td>2</td><td>Berglunds</td><td>Christina</td<td>Sweden</td></tr>
  <tr id="8"><td>4</td><td>Handel</td><td>Roland</td<td>Austria</td></tr>     
</table>

您可以看到序列号列现在是1,2,4(序列号3已删除)。

如何在我的jquery代码中包含一个函数,以便删除后它会将序列号重新排序为1,2,3(即最后一行的序列号将变为3)?

[注意:删除可能在中间行。所以.last()选择器在这种情况下可能不起作用]

1 个答案:

答案 0 :(得分:5)

删除行后,只需循环更新其第一个单元格的兄弟姐妹:

var callback_msg = data.return_msg;
if(callback_msg=='delete'){
    var row = $(document.getElementById(id)); // Or continue to use the invalid ID selector: '#'+id
    var siblings = row.siblings();
    row.remove();
    siblings.each(function(index) {
        $(this).children('td').first().text(index + 1);
    });
}

直播示例 (我必须在每一行添加一个.del元素,我假设您正在某处...

$("body").on("click",".del",function(event){
   event.preventDefault();
   var table= 'staff';
   var row = $(this).closest('tr');
   var id = row.attr("id");
   alert("Deleting id #" + id);
   setTimeout(function() { // Simulating ajax
       var siblings = row.siblings();
       row.remove();
       siblings.each(function(index) {
         $(this).children().first().text(index);
       });
   }, 100);
});
.del {
  cursor: pointer;
}
<table border="1" id="staff">
  <tr><th>S/N</th><th>Company</th><th>Contact</th><th>Country</th><th></th></tr>
  <tr id="1"><td>1</td><td>Futter</td><td>Anders</td><td>Germany</td><td class="del">X</td></tr>
  <tr id="2"><td>2</td><td>Berglunds</td><td>Christina</td><td>Sweden</td><td class="del">X</td></tr>
  <tr id="8"><td>3</td><td>Handel</td><td>Roland</td><td>Austria</td><td class="del">X</td></tr>
  <tr id="9"><td>4</td><td>JLR</td><td>Jag</td><td>UK</td><td class="del">X</td></tr>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

从评论中,您似乎不确定将上述内容放在哪里。这是在上下文中:

$("body").on("click",".del",function(event){
   event.preventDefault();
   var table= 'staff';
   var id = $(this).closest('tr').attr('id'); 
       $.post(url,
        {
         table: tbl,
         trid: id,
        },function(data){
          var callback_msg = data.return_msg;                   //
          if(callback_msg=='delete'){                           //
            var row = $(document.getElementById(id));           // Changed
            var siblings = row.siblings();                      // code
            row.remove();                                       // is
            siblings.each(function(index) {                     // here
                $(this).children('td').first().text(index + 1); //
            });                                                 //
          }                                                     //
       });
});

虽然实际上,这样会更有效率,并且完全避免按id选择:

$("body").on("click",".del",function(event){
   event.preventDefault();
   var table= 'staff';
   var row = $(this).closest('tr');                            // *
   var id = row.attr('id');                                    // *
       $.post(url,
        {
         table: tbl,
         trid: id,
        },function(data){
          var callback_msg = data.return_msg;                   // *
          if(callback_msg=='delete'){                           // *
            var siblings = row.siblings();                      // *
            row.remove();                                       // *
            siblings.each(function(index) {                     // *
                $(this).children('td').first().text(index + 1); // *
            });                                                 // *
          }                                                     // *
       });
});

'#'+id为数字时使用id的注意事项:以数字开头的ID选择器(如#1#42等)无效。 jQuery单独支持它们(例如,$("#1")可以工作但$("#1 span")没有)作为副产品支持它们使用getElementById下的优化它们的事实封面。这是无证行为,理论上可以随时改变。 (在事实中,如果他们改变它,我无法想象他们会破坏多少个网站。:-))我避免依赖无证件行为,所以我建议$(document.getElementById(id))相反,它完全依赖记录的行为。