Насколько я могу судить, ваш код был довольно далеко. Вы использовали неправильный nodeType и имели неправильный регистр для nodeName, и не было никаких причин для сильно вложенных операторов if. Но вы можете заставить его работать рекурсивно так:
addRemoveButton = function(node) {
if (node.nodeType == 1) {
if (node.nodeName.toLowerCase() == "input" &&
node.getAttribute("type") == "button" &&
node.getAttribute("name") == "add") {
var removeButton = node.cloneNode(true);
removeButton.removeAttribute("name");
removeButton.setAttribute("value", "remove");
removeButton.setAttribute("onclick", "");
removeButton.setAttribute("id", "");
(node.parentNode).appendChild(removeButton);
return;
} else {
var list = node.childNodes;
for (var i=0; i < list.length; i++) {
// be aware of childNodes changing on us live here
// when we modify the DOM
addRemoveButton(list[i]);
}
}
}
}
addRemoveButton(document.body);
Вы можете увидеть, как это работает здесь: http://jsfiddle.net/jfriend00/WCj4b/
Используя jQuery (которым вы также пометили свой вопрос) и продолжая использовать операцию клонирования, вы можете сделать это:
$("input[type='button'][name='add']").each(function(index, el) {
$(this).clone(false)
.val("remove")
.removeAttr("name")
.attr("onclick", "")
.attr("id", "")
.insertAfter(this);
});
Демо здесь: http://jsfiddle.net/jfriend00/JKsZC/
Или гораздо более простая версия, которая просто вставляет новый HTML, а не клонирует существующую кнопку:
$("input[type='button'][name='add']").after('<input type="button" value="Remove" />');
Демо здесь: http://jsfiddle.net/jfriend00/vSZwp/