Thêm / xóa HTML bên trong div bằng JavaScript


80

Tôi muốn có thể thêm nhiều hàng vào một div và cũng có thể xóa chúng. Tôi có nút '+' ở đầu trang để thêm nội dung. Sau đó, ở bên phải của mỗi hàng có một nút '-' để xóa chính hàng đó. Tôi chỉ không thể tìm ra mã javascript trong ví dụ này.

Đây là cấu trúc HTML cơ bản của tôi:

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

<div id="content">

</div>

Đây là những gì tôi muốn thêm vào bên trong div nội dung:

<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
Bạn có thể đăng mã JavaScript của mình cho đến nay không?
elclanrs

@elclanrs Tôi đã thử làm theo hướng dẫn này: dustindiaz.com/… nhưng không nhận được mã hoạt động với ví dụ của tôi. Tôi cũng đã xem xét câu trả lời cập nhật mà anh ấy đã đăng nhưng tôi không thực sự hiểu mã vì tôi khá mới với JavaScript.
Daniel Tovesson

Câu trả lời:


151

Bạn có thể làm một cái gì đó như thế này.

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);
}

Tôi muốn có thể thêm nhiều hàng. Câu hỏi của tôi là một chút không rõ ràng nên tôi đã chỉnh sửa nó.
Daniel Tovesson

1
Điều này hỗ trợ nhiều hàng.
Austin Brunkhorst,

1
Ờ, đúng vậy. Vừa gặp lỗi khi thử mã của bạn. Nó đang làm việc bây giờ. Chúc mừng!
Daniel Tovesson

Mặc dù, nó không hoạt động khi gói đầu vào trong một div như<div class="options_part"></div>
Daniel Tovesson

2
Ồ, được rồi. Bạn cần phải loại bỏ một đứa trẻ từ cha mẹ, vì vậy thay đổi input.parentNodeđể input.parentNode.parentNoderemoveRow(). Xin nhắc lại rằng nếu bạn thêm bất kỳ bậc cha mẹ nào vào các nút xóa, bạn sẽ phải thay đổi cho removeRowphù hợp như tôi vừa làm.
Austin Brunkhorst,

8

Trước sự ngạc nhiên lớn nhất của tôi, tôi giới thiệu với bạn một phương pháp DOM mà tôi chưa từng sử dụng trước khi googeling câu hỏi này và tìm thấy cổ xưa insertAdjacentHTMLtrên MDN (xem CanIUse? InsertAdjacentHTML để biết bảng tương thích màu xanh lá cây khá đẹp).

Vì vậy, sử dụng nó bạn sẽ viết

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

Bạn có thể sử dụng hàm này để thêm phần tử con vào phần tử 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

Một giải pháp khác là sử dụng getDocumentByIdinsertAdjacentHTML.

Mã:

function addRow() {

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

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

}

Kiểm tra tại đây, để biết thêm chi tiết: Element.insertAdjacentHTML ()


2

Để loại bỏ nút, bạn có thể thử giải pháp này, nó đã giúp tôi.

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

1

tạo một lớp cho nút đó, hãy nói:

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

js của bạn sẽ trông như thế này:

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

4
Anh ấy không đề cập đến jQuery.
Austin Brunkhorst,

1

hãy thử làm theo để tạo

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

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

    }

1

Thêm HTML bên trong div bằng JavaScript

Cú pháp:

element.innerHTML += "additional HTML code"

hoặc là

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

Xóa HTML bên trong div bằng 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>

Vui lòng giải thích mã của bạn một chút cho người hỏi. :)
Lamanus

Trong đoạn mã này, chúng ta có thể dễ dàng THÊM và XÓA hộp văn bản cụ thể.
Aezaz Desai
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.