js控制表格增加删除中的索引序号等排序问题

有一个表格,javascript控制添加行和删除行,部分如下:

<ul class="c-listUnstyled clearfix p-postion_base">
                <li class="u-mt-content">
                    <a href="#" id="add_btn" name="add_btn" class="p-button_base p-button_type01 p-btn_top-right">加一行</a>
                </li>
            </ul>
<table id="prize_list" class="c-table_data_list c-table c-table_fixed u-text-center">
                        <tbody>
                        <tr>
                            <th class="u-text-center c-table_data_list--th u-percent15">第一列</th>
                            <th class="u-text-center c-table_data_list--th u-percent14">第二列</th>
                            <th class="u-text-center c-table_data_list--th">第三列</th>
                            <th class="u-text-center c-table_data_list--th">删除列</th>
                        </tr>
                        <tr>
                            <td class="c-table_data_list--td u-text-middle">1</td>
                            <td class="c-table_data_list--td u-text-middle">
                                <input class="p-form__input u-w-max p-float_l" type="text" name="step[0]" value="">
                            </td>
                            <td class="c-table_data_list--td u-text-middle u-text-left">
                                <input class="p-form__input u-w-max p-float_l" type="text" name="point[0]" value="">
                            </td>
                            <td class="c-table_data_list--td u-text-middle"></td>
                        </tr>
                        <tr>
                            <td class="c-table_data_list--td u-text-middle">2</td>
                            <td class="c-table_data_list--td u-text-middle">
                                <input class="p-form__input u-w-max p-float_l" type="text" name="step[1]" value="">
                            </td>
                            <td class="c-table_data_list--td u-text-middle u-text-left">
                                <input class="p-form__input u-w-max p-float_l" type="text" name="point[1]" value="">
                            </td>
                            <td class="c-table_data_list--td u-text-middle">
                                <a href="#" name="delete_check_point" class="p-button_base--table p-button_type03 delete-row">删除</a>
                            </td>
                        </tr>
                        <tr>
                            <td class="c-table_data_list--td u-text-middle">3</td>
                            <td class="c-table_data_list--td u-text-middle">
                                <input class="p-form__input u-w-max p-float_l" type="text" name="step[2]" value="">
                            </td>
                            <td class="c-table_data_list--td u-text-middle u-text-left">
                                <input class="p-form__input u-w-max p-float_l" type="text" name="point[2]" value="">
                            </td>
                            <td class="c-table_data_list--td u-text-middle">
                                <a href="#" name="delete_check_point" class="p-button_base--table p-button_type03 delete-row">删除</a>
                            </td>
                        </tr>
                        </tbody>
                    </table>

现在我有一个类似如下的增加行和删除行的按钮,其中第一行索引为[0]的行不会被删除

$(document).ready(function () {

  $('#add_btn').on('click', function (e) {
    e.preventDefault();

    var cnt = $('#prize_list tbody tr').length + 1;

    $('#prize_list tbody').append(
      '<tr>' +
        '    <td class="c-table_data_list--td u-text-middle">' +
        cnt +
        '</td>' +
        '    <td class="c-table_data_list--td u-text-middle">' +
        '        <input class="p-form__input u-w-max p-float_l" type="text" name="step[' +
        (cnt - 1) +
        ']" value="">' +
        '    </td>' +
        '    <td class="c-table_data_list--td u-text-middle u-text-left">' +
        '        <input class="p-form__input u-w-max p-float_l" type="text" name="point[' +
        (cnt - 1) +
        ']" value="">' +
        '    </td>' +
        '    <td class="c-table_data_list--td u-text-middle">' +
        '        <a href="#" name="delete_check_point" class="p-button_base--table p-button_type03 delete-row">削除</a>' +
        '    </td>' +
        '</tr>'
    );
  });

  $('#prize_list').on('click', 'a.delete-row', function (e) {
    e.preventDefault();

    var row = $(this).closest('tr');
    var index = row.index();

    if (index > 0) {
      row.remove();
    }
  });
});

但是这样出现一个问题,在下一个页面的确认并循环出数据入库的时候,会出现索引中的断档情况从而出现错误,如step[0]之后直接就是[2]而[1]被删除了,而且好像第一列的排序也会有断档,请问有无办法避免这一情况,谢谢(并非删除对应的哪一行直接从索引最大的地方开始删除也可,从而使排序变得简单?

重置第一列序号的同时重置下name的值,要不删除后会断开

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7714445
  • 除此之外, 这篇博客: js深层拷贝中的  拷贝分为浅层拷贝和深层拷贝,在js中拷贝主要针对于对象类型的,因为对象直接赋值是地址,这样复制过来的对象里面改变,这时候原来的对象也会跟着变化,这因此不是我们想要的,因此我们要深层拷贝,深层拷贝时拷贝过来的对象再怎么变化,原来那个不会变化,要考虑到对象里面可以嵌套对象,要做到这个完全深拷贝,方法有多种,以下两种供大家看。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    方法一,

    function deepcopy(obj){
    				if(Array.isArray(obj)){
    					var newObj = [];
    				}else{
    					var newObj = {}
    				}
    			   
    			   for (var i in obj) {
    			   	  if(typeof obj[i] == 'object'){
    			   	  	newObj[i] = deepcopy(obj[i]);
    			   	  }else{
    			   	  	newObj[i] = obj[i];
    			   	  }
    			   }
    			    return newObj;
    			}        
               var ss = {a:[1]};
               var ss1 = deepcopy(ss);
               ss["a"].push(2);
               console.log(ss,ss1);
             

    方法二,运用json的方法

    function deepClone(obj) {
                      let _obj = JSON.stringify(obj),
                            objClone = JSON.parse(_obj);
                        return objClone
                    }

     


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^