Add/remove HTML inside div using JavaScript

JavascriptHtmlInnerhtml

Javascript Problem Overview


I want to be able to add multiple rows to a div and also removing them. I have a '+' button at the top of the page which is for adding content. Then to the right of every row there is a '-' button that's for removing that very row. I just can't figure out the javascript code in this example.

This is my basic HTML structure:

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

</div>

This is what I want to add inside the content 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()">

Javascript Solutions


Solution 1 - Javascript

You can do something like this.

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

Solution 2 - Javascript

To my most biggest surprise I present to you a DOM method I've never used before googeling this question and finding ancient insertAdjacentHTML on MDN (see CanIUse?insertAdjacentHTML for a pretty green compatibility table).

So using it you would write

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>

Solution 3 - Javascript

Another solution is to use getDocumentById and insertAdjacentHTML.

Code:

function addRow() {

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

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

}

Check here, for more details: Element.insertAdjacentHTML()

Solution 4 - Javascript

You can use this function to add an child to a DOM element.

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

Solution 5 - Javascript

I know it took too long, it means you can write more briefly.

    function addRow() {
        var inputName, inputValue, label, checkBox, checked, inputDecrease, content, Ptag;
        // div
        content = document.getElementById('content');
        // P tag
        Ptag = document.createElement('p');
        // first input
        inputName = document.createElement('input');
        inputName.type = 'text';
        inputName.name = 'name';
        // Second input
        inputValue = document.createElement('input');
        inputValue.type = 'text';
        inputValue.name = 'Value';
        // Label
        label = document.createElement('label');
        // checkBox
        checkBox = document.createElement('input');
        checkBox.type = 'checkbox';
        checkBox.name = 'check';
        checkBox.value = '1';
        // Checked?
        checked = document.createTextNode('Checked?');
        // inputDecrease
        inputDecrease = document.createElement('input');
        inputDecrease.type = 'button';
        inputDecrease.value = '-';
        inputDecrease.setAttribute('onclick', 'removeRow(this)')
        // Put in each other
        label.appendChild(checkBox);
        label.appendChild(checked);
        Ptag.appendChild(inputName);
        Ptag.appendChild(inputValue);
        Ptag.appendChild(label);
        Ptag.appendChild(inputDecrease);
        content.appendChild(Ptag);
    }

    function removeRow(input) {
        input.parentNode.remove()
    }

* {
    margin: 3px 5px;
}

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

<div id="content">

</div>

Solution 6 - Javascript

To remove node you can try this solution it helped me.

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

Solution 7 - Javascript

Add HTML inside div using JavaScript

Syntax:

element.innerHTML += "additional HTML code"

or

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

Remove HTML inside div using JavaScript

elementChild.remove();

Solution 8 - Javascript

make a class for that button lets say :

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

your js should look like this :

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

Solution 9 - Javascript

please try following to generate

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

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

Solution 10 - Javascript

<!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>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDaniel TovessonView Question on Stackoverflow
Solution 1 - JavascriptAustin BrunkhorstView Answer on Stackoverflow
Solution 2 - JavascriptHoffmannView Answer on Stackoverflow
Solution 3 - JavascriptCatalin MateiView Answer on Stackoverflow
Solution 4 - JavascriptArunView Answer on Stackoverflow
Solution 5 - JavascriptMuhammad Ali MalekzadehView Answer on Stackoverflow
Solution 6 - Javascriptuser2503896View Answer on Stackoverflow
Solution 7 - JavascriptVương Hữu ThiệnView Answer on Stackoverflow
Solution 8 - JavascriptdashmeView Answer on Stackoverflow
Solution 9 - JavascriptAarif QureshiView Answer on Stackoverflow
Solution 10 - JavascriptAezaz DesaiView Answer on Stackoverflow