【问题标题】:jquery how to get data-id value of datatable row?jquery如何获取数据表行的data-id值?
【发布时间】:2021-03-03 19:29:21
【问题描述】:

我正在处理jquery datatable。我正在将用户输入数据添加到行中。

$('.add-row').on('click', function() {
            
            name = $('#name').val();
            email = $('#email').val();
            cno = $('#cno').val();
            bdy = $('#bday').val();
            t.row.add([
                name,
                email,
                cno,
                bdy,
                '<button class ="btn btn-danger del">Delete</button>' + '' + '<button class="btn btn-warning upd" data-id="'+$('#example').DataTable().rows().count()+'">Edit</button>'
            ]).draw(false);
            $("#name").val('');
            $("#email").val('');
            $("#cno").val('');
            $("#bday").val('');

        });

在上面的代码中,有data-id 我在其中添加行数。现在我也在删除该行。

 $("body").on("click", ".del", function() {

            if ($(row).hasClass('child')) {
                t.row($(row).prev('tr')).remove().draw();
            } else {
                t.row($(this).parents('tr')).remove().draw();
            }
        });

删除行后。行数为n-1。每当我尝试添加新行时,我都想获得最新的 data-id 值。例如,我添加了 3 行,行数为 3,所以 data-id 将是 3。所以我想获得 data-id 的最后/最新值

任何帮助将不胜感激?

【问题讨论】:

  • 你的意思是你添加行,所以data-id +1,一旦删除行来了,data-id被锁定到del之前的最后一个值?甚至在添加行到达后数据ID保持锁定?
  • 第一次运行时data-id 的值为0。添加第二行时其值为1,添加第三行时其值为2,以此类推。但是例如,当我删除具有data-id = 1 的第二行并且最后一个data-id 值为2 时。现在,如果我添加一个新行,数据 id 应该是 2+1data-id 的最后一个值加上 1 所以在这种情况下没有重复
  • 好的,我不知道更好,您不想从 0 重新索引所有数据 ID? (更容易)

标签: javascript html jquery datatables


【解决方案1】:

更新

我搜索了最大的data-id,所以没有重复的问题

按照@FilipKováč 的建议,如果您确定最后一行始终具有最大 id,您可以尝试:var max = parseInt($("button.upd").last().data("id") || 0); 而不是我的 map 行。它的性能更好

$('.add-row').on('click', function() {
            var values = $.map($("button.upd"), function(el, index) { return parseInt($(el).attr("data-id")); });
            var max = Math.max.apply(null, values.length == 0 ? [0] : values);

            name = $('#name').val();
            email = $('#email').val();
            cno = $('#cno').val();
            bdy = $('#bday').val();
            t.row.add([
                name,
                email,
                cno,
                bdy,
                '<button class ="btn btn-danger del">Delete</button>' + '' + '<button class="btn btn-warning upd" data-id="'+ (max + 1) +'">Edit</button>'
            ]).draw(false);
            $("#name").val('');
            $("#email").val('');
            $("#cno").val('');
            $("#bday").val('');

        });

 $("body").on("click", ".del", function() {
            if ($(row).hasClass('child')) {
                t.row($(row).prev('tr')).remove().draw();
            } else {
                t.row($(this).parents('tr')).remove().draw();
            }
        });

如果你想重新索引 data-id:

$("button.upd").each(function(index){
  $(this).attr("data-id", index);
}

您在删除函数中执行此操作..并将初始代码保留在您的添加函数中

【讨论】:

  • 它对我不起作用。行数相同,因此下一个添加的行与最后一行具有相同的 data-id
  • @Moeez,好的,我计算了data-id的最大值,所以没有重复的问题
  • 我已经试过你的代码了。但现在我在第一排的data-id 中得到-Infinity
  • 在第一行数组的值是空的,所以我设置0以防万一,所以第一行将是1
  • 当你可以使用选择器找到最后一行时为什么要使用maptable &gt; tbody &gt; tr:last-child 然后找到其行的id,因为最后一行每次都会有最大的id。 max 看起来像 const max = parseInt($(row).find('btn.upd').data('id') || 0)++
猜你喜欢
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2016-03-23
  • 2020-08-08
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多