Javascript 删除任何元素,重新分配计数值

Javascript 删除任何元素,重新分配计数值,javascript,jquery,Javascript,Jquery,很抱歉这个神秘的标题,很难描述 单击按钮时,我使用以下脚本将一行添加到表单中: $(document).ready(function() { $('#btnAdd').click(function() { var num = $('.clonedInput').length; var newNum = new Number(num + 1); var newElem = $('#input' + num).clone()

很抱歉这个神秘的标题,很难描述

单击按钮时,我使用以下脚本将一行添加到表单中:

  $(document).ready(function() {
      $('#btnAdd').click(function() {
        var num     = $('.clonedInput').length;
        var newNum  = new Number(num + 1);

        var newElem = $('#input' + num).clone().attr('id', 'input' + newNum);

        newElem.children(':first').attr('id', 'name' + newNum).attr('name', 'name' + newNum);
        $('#input' + num).after(newElem);
        $('#btnDel').attr('disabled','');

        if (newNum == 5)
            $('#btnAdd').attr('disabled','disabled');
      });

      $('#btnDel').click(function() {
        var num = $('.clonedInput').length;

        $('#input' + num).remove();
        $('#btnAdd').attr('disabled','');

        if (num-1 == 1)
            $('#btnDel').attr('disabled','disabled');
      });

      $('#btnDel').attr('disabled','disabled');
  });
这样做非常好,但是用户不太友好,只能删除最后添加的行。如果我想删除前面添加的一行,我将不得不删除从那时起我所做的一切


如何删除任何行,同时将计数值重新分配给其他行,使计数仍然是连续的(即第1行、第2行、第3行等,而不是第1行、第5行、第8行)?

我刚才不得不做类似的事情

基本上,我得到了被删除行的编号,即Row3,然后循环遍历其余行,更新它们的值。所以第4行变成了第3行等等

我用过这样的东西

    var last_val = //get the last value of the rows so you know when to stop

    //knock off the Row part of the id and parses as an integer
    var pos = parseFloat(row_id.slice(3))

    var next_val = position+1;
    var prev_val = position;

    while(next_val<=last_val){
        next_selector = "#Row"+next_val;
        prev_id = "Row"+prev_val;
        $(next_selector).attr("id",prev_id);
        next_val++;
        prev_val++;
    }
var last\u val=//获取行的最后一个值,以便知道何时停止
//去掉id的行部分并将其解析为整数
var pos=parseFloat(行id.切片(3))
var next_val=位置+1;
var prev_val=位置;

while(next_val我建议您不要显式地为元素设置id。相反,您可以使用jQuery强大的选择器来获取元素的位置

这是一个基于常见html结构的示例。发布您自己的html以提供更多详细信息

  $('.btnDel').click(function() {
    var num = $(this).parent().prevAll().size();

    // this points to delete link.
    // The previous element is the content element
    $(this).prev().remove();

    $('#btnAdd').attr('disabled','');

    if (num-1 == 1)
            $(this).attr('disabled','disabled');
  });

<div class='elem'>
  <span class='content'>....</span>
  <a class='btnDel' href='#'>Delete</a>
</div>
$('.btnDel')。单击(函数(){
var num=$(this.parent().prevAll().size();
//这指向删除链接。
//前一个元素是content元素
$(this.prev().remove();
$('btnAdd').attr('disabled','');
如果(num-1==1)
$(this.attr('disabled','disabled');
});
....

为什么还要在行中添加ID?记住,jQuery的83%是“Query”-使用选择器来获取所需的元素。

我发布了一个(在IE中,由于浮动,它看起来不太好,但我只想将此作为一个示例发布以提供帮助).我不知道您如何处理收集表单数据的问题,因此我将克隆的输入ID重新编号

CSS

HTML


名称:
标题:
公司:
地点:
其他信息:
剧本

$(document).ready(function(){
 $('#btnAdd').click(function(){
    // inputs reversed because of the float right
  var newInput = '<div class="clonedInput">Additional Field <span></span>: ' +
   '<input type="button" class="btnDel" title="Delete this field" value="X"><input type="text" /></div>';
  $(newInput).appendTo('#addFields');
  // disable add button if there are 5 additional fields
  if ($('.clonedInput').length == 5) {
   $('#btnAdd').attr('disabled','disabled');
  }
  renumber();
 })
 // Delete input field
 $('.btnDel').live('click',function(){
  $('#btnAdd').attr('disabled','');
  $(this).parent().remove();
  renumber();
 })
})
// This function adds the additional field number and ID for each clonedInput field
function renumber(){
 $('.clonedInput').each(function(i){
  $(this).find('span').html('#' + (i+1));
  // the code below will change the ID of the input, in case you collect your data based on the ID.
  $(this).find('input[type=text]').attr('id', 'input' + (i+1));
 })
}
$(文档).ready(函数(){
$('#btnAdd')。单击(函数(){
//由于右浮动,输入反转
var newInput='附加字段:'+
'';
$(newInput).appendTo(“#addFields”);
//如果有5个附加字段,则禁用“添加”按钮
如果($('.clonedInput')。长度==5){
$('btnAdd').attr('disabled','disabled');
}
重新编号();
})
//删除输入字段
$('.btnDel').live('click',function(){
$('btnAdd').attr('disabled','');
$(this.parent().remove();
重新编号();
})
})
//此函数为每个clonedInput字段添加额外的字段号和ID
函数重新编号(){
$('.clonedInput')。每个(函数(i){
$(this.find('span').html('#'+(i+1));
//下面的代码将更改输入的ID,以防您根据ID收集数据。
$(this.find('input[type=text]')).attr('id','input'+(i+1));
})
}

我不知道如何告诉它在没有显式id的情况下删除哪个元素。我现在有:var num=$('.clonedInput').prevAll().size();$('#input').remove();没有输入num,它怎么知道删除什么?我已经发布了一个示例。您可以使用$(这个)和jQuery选择器,以任意方式操作DOM。不需要为每个元素指定特定的id。
<form>
<div class="main">
 Name: <input type="text" /><br>
 Title: <input type="text" /><br>
 Company: <input type="text" /><br>
 Location: <input type="text" /><br>
</div>
Additional information: <input id="btnAdd" type="button" value="Add More"/>
<div id="addFields"></div>
</form>
$(document).ready(function(){
 $('#btnAdd').click(function(){
    // inputs reversed because of the float right
  var newInput = '<div class="clonedInput">Additional Field <span></span>: ' +
   '<input type="button" class="btnDel" title="Delete this field" value="X"><input type="text" /></div>';
  $(newInput).appendTo('#addFields');
  // disable add button if there are 5 additional fields
  if ($('.clonedInput').length == 5) {
   $('#btnAdd').attr('disabled','disabled');
  }
  renumber();
 })
 // Delete input field
 $('.btnDel').live('click',function(){
  $('#btnAdd').attr('disabled','');
  $(this).parent().remove();
  renumber();
 })
})
// This function adds the additional field number and ID for each clonedInput field
function renumber(){
 $('.clonedInput').each(function(i){
  $(this).find('span').html('#' + (i+1));
  // the code below will change the ID of the input, in case you collect your data based on the ID.
  $(this).find('input[type=text]').attr('id', 'input' + (i+1));
 })
}