Olá gorpo85! Aprecio os desafios que tu posta em cada publicação!
Aproveitei a sugestão do PabloJuan255 ao criar os arquivos HTML/JS para um teste. Os códigos cumprem o que prometem. Que legal : ), muito útil para criar componentes em tempo de execução.
Arquivo: codigoTeste.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Add Elements</title>
<script src="addElement.js"></script>
</head>
<body>
<h1>Adicione elementos ao formulario</h1>
<p>O formulario abaixo permite voce adicionar elementos dinamicamente</p>
<form name="form1">
<div id="itens">
<b>Item 1:</b>
<input type="text" name="item1" size="45"/><br><br>
<input type="button" value="Adicionar elemento" onClick="AddItem();" id="add"/>
</div>
</form>
</body>
</html>
Arquivo: addElement.js
let items = 1;
function AddItem(){
div = document.querySelector("#itens");
button = document.querySelector("add");
items++;
novoitem = "Item " + items + ": ";
novoitem += '<input type="text" name="item' + items;
novoitem += '" size="45">';
novonode = document.createElement("span");
novonode.innerHTML = novoitem;
div.insertBefore(novonode, button);
}
Sintetizei o texto de sua publicação. Caso deseje, compartilho temporariamente um b64.
PS: Agradeço à comunidade Tabnews e, principalmente, ao filipedeschamps por ter me dado um impulso para formatar minhas postagens usando as tags de markdown. O texto resultante fica mais apresentável e fácil de ler.