JavaScript를 사용하여 div 내에서 HTML 추가 / 제거


80

div에 여러 행을 추가하고 제거 할 수 있기를 원합니다. 콘텐츠를 추가하기위한 페이지 상단에 '+'버튼이 있습니다. 그런 다음 모든 행의 오른쪽에는 해당 행을 제거하는 '-'버튼이 있습니다. 이 예제에서는 자바 스크립트 코드를 알아낼 수 없습니다.

이것은 내 기본 HTML 구조입니다.

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

<div id="content">

</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를 처음 접했기 때문에 코드를 실제로 이해하지 못했습니다.
다니엘 Tovesson

답변:


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

여러 행을 추가하고 싶습니다. 내 질문이 약간 불분명해서 편집했습니다.
다니엘 Tovesson

1
이것은 여러 행을 지원합니다.
오스틴 Brunkhorst

1
아, 맞다. 코드를 시도하는 중에 오류가 발생했습니다. 지금 작동하고 있습니다. 건배!
다니엘 Tovesson

div에 입력을 래핑 할 때 작동하지 않지만<div class="options_part"></div>
Daniel Tovesson 2013-07-15

2
오, 알았어. 당신은 변화 때문에, 부모로부터 아이를 제거해야 input.parentNodeinput.parentNode.parentNode에서 removeRow(). 제거 버튼에 부모를 더 추가하면 removeRow방금했던 것처럼 그에 따라 변경해야한다는 점을 상기시킵니다 .
Austin Brunkhorst 2013

8

가장 놀랍게도 저는이 질문을 googeling insertAdjacentHTML하고 MDN에서 고대 를 찾기 전에 사용한 적이없는 DOM 메서드 를 제공합니다 (예쁜 녹색 호환성 테이블 은 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

또 다른 솔루션을 사용하는 것입니다 getDocumentByIdinsertAdjacentHTML .

암호:

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에 대해 언급하지 않았습니다.
오스틴 Brunkhorst

1

생성하려면 다음을 시도하십시오

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

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

    }

1

JavaScript를 사용하여 div 내부에 HTML 추가

통사론:

element.innerHTML += "additional HTML code"

또는

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

JavaScript를 사용하여 div 내에서 HTML 제거

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>

질문자에게 코드를 약간 설명해주세요. :)
Lamanus

이 코드에서는 특정 텍스트 상자를 쉽게 추가하고 제거 할 수 있습니다.
Aezaz Desai
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.