删除输入后,将输入名称元素数组中的数字从零开始排列

我希望删除html代码中的一行(例如: 第2行 )后,通过jQuery更改为name元素。

例如,我们首先在html中:

第1行: name =“check [ 0 ] []”
第2行(已删除): name =“check [ 1 ] []”
第3行: name =“check [ 2 ] []”
第4行: name =“check [ 3 ] []”

现在,如果我们删除第二行,事实上,在删除第2行之后,我们有这样的行:

第1行: name =“check [ 0 ] []”
第3行: name =“check [ 2 ] []”
第4行: name =“check [ 3 ] []”

但我希望它在结果中(在删除行之一:第2行之后)为:

第1行: name =“check [ 0 ] []”
第3行: name =“check [ 1 ] []”
第4行: name =“check [ 2 ] []”

我试过(参见我的完整代码)但不要工作: http : //jsfiddle.net/k3wne/

JS:

$('.remove_input').live('click', function (e) { e.preventDefault(); var remove = $(this).closest($class); remove.fadeOut('slow', function () { $('.add_units').each(function (idx, val) { var num = $('.add_units').length; NumIdx = (num - (num - idx)); //for(var i = 0; i < num-1; i++){ $(this).closest($class_guide).next($class_guide).each(function (idx, val) { $('.add_units input[type="checkbox"]').attr('name', function (idx, str) { var int = parseInt(str.match(/\d+/)[0], 10); return str.replace(int, NumIdx); }) }); //} }) });) }​ 

这里

DEMO

 $('.remove_input').live('click', function (e) { e.preventDefault(); var remove = $(this).closest('.RowCheck'); remove.fadeOut('slow', function () { $(this).remove(); // or change next line to $('.RowCheck:visible') $('.RowCheck').each(function (idx) { var checkBoxes = $('input[type="checkbox"]',this); checkBoxes.each(function(i) { var str = $(this).attr('name'); var currentIdx = parseInt(str.match(/\d+/)[0], 10); $(this).attr('name', str.replace(currentIdx,idx)); }) }); }); });​ 

如果您这样做,此代码将起作用

  1. 删除真实的行 – 也是爆炸药丸
  2. 像西蒙一样可见的测试

http://jsfiddle.net/k3wne/1/

一些事情:你从来没有真正删除元素一旦它淡出你的计数,并且最后一个选择器( .RowCheck input[type="checkbox"] )影响所有复选框,所以它们都将具有最高的数字。

在我的更改中,只有迭代中的当前行受到影响。

大多数代码都是正确的,但需要进行一些更改:

更改为使用$(’。RowCheck:visible’)。each()作为fadeOut只是隐藏该行但不是真正删除,内部循环应该使用$(’input [type =“checkbox”]’,this)

代码如下所示:

 $('.remove_input').live('click', function (e) { e.preventDefault(); var remove = $(this).closest('.RowCheck'); remove.fadeOut('slow', function () { debugger; $('.RowCheck:visible').each(function (idx, val) { var num = $('.RowCheck:visible').length; NumIdx = (num - (num - idx)); //for(var i = 0; i < num-1; i++){ //$(this).closest('.RowCheck').next().each(function (idx, val) { $('input[type="checkbox"]', this).attr('name', function (idx, str) { var int = parseInt(str.match(/\d+/)[0], 10); return str.replace(int, NumIdx); }) //}); //} }); }); });​ 

DEMO