El programa se bloqueará como lo tienes ya que te está faltando una llamada a la función.
Pruebe esto en su lugar. Note la llamada a find()
:
$(id).clone().attr("id", "newId").find("#input_1").attr("id", "input_2");
es probable que sea mejor para hacer referencia al clon en una variable en primer lugar.
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");
Puede establecer los atributos de ID de uno en uno para los descendientes de su clon si lo desea. Si hay varios, y si tiene un patrón consistente para las identificaciones, es probable que pueda hacer algo un poco más automatizado.
EDIT:
He aquí un ejemplo de actualizar automáticamente todos los identificadores en el $clone
.
Tenga en cuenta que esto puede no funcionar para usted, ya que supone que todos los los ID terminan con un número.
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);
});
He intentado utilizar find() antes y pude cambiar uno de los atributos, pero los otros atributos no cambian. Me dijeron que eso se debe a que la próxima vez que uso find cree que el siguiente elemento se encuentra dentro del mismo id. Entonces, si tengo 3 id's para cambiar, usando find cambiaría el primero, pero los demás permanecerán intactos. – rshivers
@rshivers - Es por eso que almacené el clon en una variable. Que almacena la estructura completa que clonó, por lo que puede hacer llamadas adicionales 'find()' contra '$ clon'. Nuevamente, si tiene varios para actualizar, probablemente haya una manera de hacerlo más rápido que uno a la vez. – user113716
puede cambiar '$ clone.attr ('id', $ clone.attr ('id'). Replace (/ \ d + $ /, function (str) {return parseInt (str) + 1;}));' a '$ clone.attr ('id', función (i, attr) {return attr.replace (/ \ d + $ /, función (str) {return parseInt (str) + 1;} \t)});' – azatoth