Changing various id's after cloning in jquery

后端 未结 3 779
离开以前
离开以前 2020-12-06 02:14

I\'m trying to clone a table row and update the multiple id\'s to reflect the input fields. I start by doing this and it works:

$(id).clone().attr(\"id\", \"         


        
3条回答
  •  生来不讨喜
    2020-12-06 03:07

    The program will crash as you have it since you're missing a function call.

    Try this instead. Notice the call to find():

    $(id).clone().attr("id", "newId").find("#input_1").attr("id", "input_2");
    

    It will probably be better to reference the clone in a variable first.

    var $clone = $(id).clone();
    
    $clone.attr("id", "newId").find("#input_1").attr("id", "input_2");
    $clone.find("#someElement").attr("id","someElement_2");
    $clone.find("#someOtherElement").attr("id","someOtherElement_2");
    

    You can set the ID attributes one at a time for the descendants of your clone if you wish. If there are several, and if you have a consistent pattern for IDs, you will likely be able to do something a little more automated.


    EDIT:

    Here's an example of automatically updating all the IDs in the $clone.

    Please note that this may not work for you, as it assumes that all the IDs end with a number.

    var $clone = $(id).clone();    // Create your clone
    
          // Get the number at the end of the ID, increment it, and replace the old id
    $clone.attr('id',$clone.attr('id').replace(/\d+$/, function(str) { return parseInt(str) + 1; }) ); 
    
         // Find all elements in $clone that have an ID, and iterate using each()
    $clone.find('[id]').each(function() { 
    
         //Perform the same replace as above
        var $th = $(this);
        var newID = $th.attr('id').replace(/\d+$/, function(str) { return parseInt(str) + 1; });
        $th.attr('id', newID);
    });
    

提交回复
热议问题