Додавання / видалення HTML всередині div за допомогою JavaScript


80

Я хочу мати можливість додавати декілька рядків до div, а також видаляти їх. У мене є кнопка "+" у верхній частині сторінки, яка призначена для додавання вмісту. Потім праворуч від кожного рядка є кнопка '-', яка дозволяє видалити саме цей рядок. Я просто не можу зрозуміти код javascript у цьому прикладі.

Це моя основна структура HTML:

<input type="button" value="+" onclick="addRow()">

<div id="content">

</div>

Це те, що я хочу додати до div div вмісту:

<input type="text" name="name" value="" />
<input type="text" name="value" value="" />
<label><input type="checkbox" name="check" value="1" />Checked?</label>
<input type="button" value="-" onclick="removeRow()">

2
Чи можете ви опублікувати свій код JavaScript поки що?
elclanrs

@elclanrs Я спробував дотримуватися цього підручника: dustindiaz.com/…, але не отримав коду для роботи з моїм прикладом. Я також вивчив оновлену відповідь, яку він опублікував, але я насправді не розумів код, оскільки я досить новий у JavaScript.
Даніель Товессон,

Відповіді:


151

Ви можете зробити щось подібне.

function addRow() {
  const div = document.createElement('div');

  div.className = 'row';

  div.innerHTML = `
    <input type="text" name="name" value="" />
    <input type="text" name="value" value="" />
    <label> 
      <input type="checkbox" name="check" value="1" /> Checked? 
    </label>
    <input type="button" value="-" onclick="removeRow(this)" />
  `;

  document.getElementById('content').appendChild(div);
}

function removeRow(input) {
  document.getElementById('content').removeChild(input.parentNode);
}

Я хочу мати можливість додавати кілька рядків. Моє запитання було трохи незрозумілим, тому я його відредагував.
Даніель Товессон,

1
Це підтримує кілька рядків.
Остін Бранкхорст,

1
О, це правильно. Щойно помилився при спробі ввести код. Зараз це працює. На здоров’я!
Даніель Товессон,

Хоча, це не працює, коли загортання вхідних даних у div, наприклад<div class="options_part"></div>
Daniel Tovesson

2
О, зрозуміла. Ви повинні видалити дитина від батьків, так що зміни input.parentNodeв input.parentNode.parentNodeв removeRow(). Нагадування, що якщо ви додасте ще батьків до кнопок видалення, вам доведеться змінити removeRowвідповідно, як я щойно зробив.
Остін Бранкхорст,

8

На моє найбільше здивування, я представляю вам метод DOM, який я ніколи не використовував, перш ніж шукати це питання та знаходити старий insertAdjacentHTMLна MDN (див. CanIUse? InsertAdjacentHTML для досить зеленої таблиці сумісності).

Отже, використовуючи його, ви писали б

function addRow () {
  document.querySelector('#content').insertAdjacentHTML(
    'afterbegin',
    `<div class="row">
      <input type="text" name="name" value="" />
      <input type="text" name="value" value="" />
      <label><input type="checkbox" name="check" value="1" />Checked?</label>
      <input type="button" value="-" onclick="removeRow(this)">
    </div>`      
  )
}

function removeRow (input) {
  input.parentNode.remove()
}
<input type="button" value="+" onclick="addRow()">

<div id="content">
</div>


3

За допомогою цієї функції можна додати дочірній елемент до елемента DOM.

function addElement(parentId, elementTag, elementId, html) 

 {


// Adds an element to the document


    var p = document.getElementById(parentId);
    var newElement = document.createElement(elementTag);
    newElement.setAttribute('id', elementId);
    newElement.innerHTML = html;
    p.appendChild(newElement);
}



function removeElement(elementId) 

{

    // Removes an element from the document
    var element = document.getElementById(elementId);
    element.parentNode.removeChild(element);
}

3

Іншим рішенням є використання getDocumentByIdта insertAdjacentHTML.

Код:

function addRow() {

 const  div = document.getElementById('content');

 div.insertAdjacentHTML('afterbegin', 'PUT_HTML_HERE');

}

Перегляньте тут, щоб дізнатися більше: Element.insertAdjacentHTML ()


2

Щоб видалити вузол, ви можете спробувати це рішення, воно мені допомогло.

var rslt = (nodee=document.getElementById(id)).parentNode.removeChild(nodee);

1

створити клас для цієї кнопки, скажімо:

`<input type="button" value="+" class="b1" onclick="addRow()">`

ваш js повинен виглядати так:

$(document).ready(function(){
  $('.b1').click(function(){
      $('div').append('<input type="text"..etc ');
  });
});

4
Він не згадував jQuery.
Остін Бранкхорст,

1

будь ласка, спробуйте дотримуватися для створення

 function addRow()
    {
        var e1 = document.createElement("input");
        e1.type = "text";
        e1.name = "name1";

        var cont = document.getElementById("content")
        cont.appendChild(e1);

    }

1

Додайте HTML всередину div за допомогою JavaScript

Синтаксис:

element.innerHTML += "additional HTML code"

або

element.innerHTML = element.innerHTML + "additional HTML code"

Видаліть HTML з div за допомогою JavaScript

elementChild.remove();

0
<!DOCTYPE html>
<html>
<head>
    <title>Dynamical Add/Remove Text Box</title>
    <script language="javascript">

        localStorage.i = Number(1);

        function myevent(action)
        {
            var i = Number(localStorage.i);
            var div = document.createElement('div');

            if(action.id == "add")
            {
                localStorage.i = Number(localStorage.i) + Number(1);
                var id = i;
                div.id = id;
                div.innerHTML = 'TextBox_'+id+': <input type="text" name="tbox_'+id+'"/>' + ' <input type="button" id='+id+' onclick="myevent(this)" value="Delete" />';

                document.getElementById('AddDel').appendChild(div);
            }
            else
            {
                var element = document.getElementById(action.id);
                element.parentNode.removeChild(element);
            }
        }
    </script>
</head>
<body>
    <fieldset>
    <legend>Dynamical Add / Remove Text Box</legend>
    <form>
        <div id="AddDel">
            Default TextBox:
            <input type="text" name="default_tb">
            <input type="button" id="add" onclick="myevent(this)" value="Add" />
        </div>
            <input type="button" type="submit" value="Submit Data" />
    </form>
    </fieldset>
</body>
</html>

Будь ласка, поясніть свій код для запитувача. :)
Ламанус,

У цьому коді ми можемо легко ДОДАТИ І ВИДАЛИТИ конкретне текстове поле.
Aezaz Desai
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.