Методы вставки cсозданых элементов

Есть js код, который при нажатии на кнопку создает элементы(дивы, инпуты). Никак не могу понять как правильно выводить чтоб получался такой html код с дочерними элементами

<div id="dd">
  <div class="block-forms block-one" id="1">
    <div class="text-console">Заголовок №1</div>
    <input type="text" name="title-H2-1">
    <div class="text-console">Текст</div>
    <textarea rows="3" cols="70" name="text-1"></textarea>
    <div id="new-input-one">
        <div class="block-input-one block-input" id="1">
            <span class="text-console">Текст</span>
            <input type="text" class="input-type name" name="name1[]">
            <span class="text-console">Текст</span>
            <input type="number" class="input-type value" min="1" max="4" name="value1[]">
        </div>
    </div>
    <input type="button" class="button-field add-field-one" value="Добавить ответ">
   </div>
</div>

Js код

$(function () {
$(document).on("click", "input[type='button'][class='add-new-block']", add_field_one);
});

let val_one = 1;

function add_field_one() {
val_one++;

if (val_one >= 11) {
    alert("не более 10 блоков");
    return;
}

let div_one = document.createElement('div');
    div_one.className = "block-forms block-one";

let div_two = document.createElement('div');
    div_two.className = "text-console";
    div_two.innerHTML = "Заголовок № " + val_one;

let input_title = document.createElement('input');
    input_title.type = "text";
    input_title.name = "title" + val_one;

let div_three = document.createElement('div');
    div_three.className = "text-console";
    div_three.innerHTML = "Текст № " + val_one;

let textarea = document.createElement('textarea');
    textarea.rows = "3";
    textarea.cols = "70";
    textarea.name = "text-" + val_one;

let div_four = document.createElement('div');
    div_four.className = "text-console";
    div_four.innerHTML = "Текст";

let block_answer = document.createElement('div');
    block_answer.className = "block-answer";

let input_answer = document.createElement('input');
    input_answer.type = "text";
    input_answer.name = "name" + val_one + "[]";

let div_answer = document.createElement('div');
    div_answer.className = "text-console";
    div_answer.innerHTML = "Текст";

div_one.id = val_one;
let del_one = '<input type="button" class="button-field del-field-one" value="Удалить" onclick="javascript:del_field_one(' + val_one + ')">';
div_one.innerHTML = document.getElementById('block-one-hidden').innerHTML + del_one;
document.getElementById('dd').append(div_one)/* продолжить вставку созданных элементов */;
}

function del_field_one(eleId_one) {
doc_one = document;
let ele_one = doc_one.getElementById(eleId_one);
let parentEle_one = doc_one.getElementById('dd');
parentEle_one.remove(ele_one);
}

Ответы (2 шт):

Автор решения: Павел Ериков

Не лучше ли запихнуть html код в строчку. Вставляя в неё то, что у вас изменяется.

Например ниже я привел код, который добавляет то, что вы хотите в <div id="dd"> при этом номер заголовка изменяется.

По такому примеру вы можете изменять что угодно.

$(function () {
$(document).on("click", "input[type='button'][class='add-new-block']", add_field_one);
});

let val_one = 1;

function add_field_one() {

let temp = (`
    <div class="block-forms block-one" id="${ val_one }">
      <div class="text-console">Заголовок №${ val_one }</div>
      <input type="text" name="title-H2-${ val_one }">
      <div class="text-console">Текст</div>
      <textarea rows="3" cols="70" name="text-${ val_one }"></textarea>
      <div id="new-input-one">
        <div class="block-input-one block-input">
          <span class="text-console">Текст</span>
          <input type="text" class="input-type name" name="name1[]">
          <span class="text-console">Текст</span>
          <input type="number" class="input-type value" min="1" max="4" name="value1[]">
        </div>
      </div>
      <input type="button" class="button-field add-field-one" value="Добавить ответ">
    </div>
  `);

val_one++;

if (val_one >= 11) {
    alert("не более 10 блоков");
    return;
}

let e = document.createElement('div');
e.innerHTML = temp;
let element = document.getElementById("bb");

while(e.firstChild) {
    element.appendChild(e.firstChild);
}

}

function del_field_one(eleId_one) {
doc_one = document;
let ele_one = doc_one.getElementById(eleId_one);
let parentEle_one = doc_one.getElementById('dd');
parentEle_one.remove(ele_one);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="button" class='add-new-block' value="Click!"/>
<div id="bb">

</div>

→ Ссылка
Автор решения: OPTIMUS PRIME

"Руками" создавать все элементы - можно, но это больно и мучительно. Можно вставить весь HTML тупо одной строкой. `обратные ${ переменная } кавычки` допускают многострочную запись.

* Убрал из HTML второй id="1" по определению, id должны быть уникальными на странице.

$(document).on("click", 'input[type="button"][class="add-new-block"]', add_field_one);

let blocks_created = 1;

function add_field_one() {
  if (blocks_created >= 10) {
    alert("Не более 10 блоков");
    return;
  }

  blocks_created++;
  
  let i = blocks_created;

  let html = (`
    <div class="block-forms block-one" id="${ i }">
      <div class="text-console">Заголовок №${ i }</div>
      <input type="text" name="title-H2-${ i }">
      <div class="text-console">Текст</div>
      <textarea rows="3" cols="70" name="text-${ i }"></textarea>
      <div id="new-input-one">
        <div class="block-input-one block-input">
          <span class="text-console">Текст</span>
          <input type="text" class="input-type name" name="name1[]">
          <span class="text-console">Текст</span>
          <input type="number" class="input-type value" min="1" max="4" name="value1[]">
        </div>
      </div>
      <input type="button" class="button-field add-field-one" value="Добавить ответ">
    </div>
  `);

  document.getElementById("dd").insertAdjacentHTML("beforeEnd", html);
}
.block-forms {
  margin: 4px;
  padding: 4px;
  border: 1px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<input type="button" class="add-new-block" value="Test">

<div id="dd">
  <div class="block-forms block-one" id="1">
    <div class="text-console">Заголовок №1</div>
    <input type="text" name="title-H2-1">
    <div class="text-console">Текст</div>
    <textarea rows="3" cols="70" name="text-1"></textarea>
    <div id="new-input-one">
      <div class="block-input-one block-input">
        <span class="text-console">Текст</span>
        <input type="text" class="input-type name" name="name1[]">
        <span class="text-console">Текст</span>
        <input type="number" class="input-type value" min="1" max="4" name="value1[]">
      </div>
    </div>
    <input type="button" class="button-field add-field-one" value="Добавить ответ">
  </div>
</div>

→ Ссылка