идентификаторы на странице должны быть уникальными, даже если вы клонируете их из шаблона.
Если вы динамически создаете контент на своей странице, тогда вы должны изменить идентификатор ваших недавно клонированных элементов на другое. Если вы хотите получить доступ ко всем клонированным элементам, но не к шаблону, вы можете добавить к ним класс, чтобы вы могли ссылаться на все элементы с этим классом:
var clonedElement = template.cloneNode(yes); // make a deep copy
clonedElement.setAttribute("id", "somethingElse"); // change the id
clonedElement.setAttribute("class",
clonedElement.getAttribute("class") + " cloned"
);
Чтобы получить доступ ко всем клонированным элементам по имени класса, вы можете использовать метод getElementsByClassName
(доступный в новых браузерах) или посмотреть на этот ответ для более глубокого решения: Как получить GetElementByClass вместо GetElementById с Javascript?
В качестве альтернативы, если у вас есть jQuery, вы можете сделать это намного меньше строк кода:
$("#template").clone().attr("id","somethingElse")
.addClass("cloned").appendTo("#someDiv");
Поиск класса еще проще:
$(".cloned").doSomethingWithTheseElements();
Старайтесь избегать использования идентификаторов в дочерних элементах клонированной структуры, поскольку все идентификаторы клонированного элемента должны быть изменены перед добавлением клона на страницу. Вместо этого вы можете ссылаться на родительский элемент, используя новый идентификатор, и обходить остальную часть структуры, используя имена классов. Имена классов не обязательно должны быть уникальными, поэтому вы можете просто оставить их как есть.
Если вам действительно нужно использовать идентификаторы (или уникальные атрибуты «name» в полях формы), я настоятельно рекомендую использовать такую среду, как jQuery или Prototype, для обработки обхода DOM; в противном случае, решить все проблемы с кросс-браузерным бременем довольно сложно. Вот пример некоторых более глубоких изменений в структуре с использованием jQuery:
$("#template").clone().attr("id","somethingElse")
.addClass("cloned") // add a cloned class to the top element
.find("#foo").attr("id","bar").end() // find and modify a child element
.appendTo("#someDiv"); // finally, add the node to the page