Chcę mieć możliwość dodawania wielu wierszy do elementu div, a także ich usuwania. U góry strony mam przycisk „+”, który służy do dodawania treści. Następnie po prawej stronie każdego wiersza znajduje się przycisk „-”, który służy do usuwania tego wiersza. Po prostu nie mogę rozgryźć kodu JavaScript w tym przykładzie.
Oto moja podstawowa struktura HTML:
<input type="button" value="+" onclick="addRow()">
<div id="content">
</div>
Oto, co chcę dodać do elementu div zawartości:
<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
html
innerhtml
Daniel Tovesson
źródło
źródło
Odpowiedzi:
Możesz zrobić coś takiego.
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); }
źródło
<div class="options_part"></div>
input.parentNode
doinput.parentNode.parentNode
wremoveRow()
. Przypomnienie, że jeśli dodasz więcej rodziców do przycisków usuwania, będziesz musiał odpowiednio zmienić,removeRow
tak jak właśnie to zrobiłem.Ku mojemu największemu zdziwieniu przedstawiam wam metodę DOM, której nigdy wcześniej nie użyłam, zanim wyszukałam w Google to pytanie i znalazłam starożytne
insertAdjacentHTML
w MDN (zobacz CanIUse? InsertAdjacentHTML, aby uzyskać całkiem zieloną tabelę zgodności).Więc używając go, napiszesz
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>
źródło
Możesz użyć tej funkcji, aby dodać dziecko do elementu 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); }
źródło
Innym rozwiązaniem jest użycie
getDocumentById
iinsertAdjacentHTML
.Kod:
function addRow() { const div = document.getElementById('content'); div.insertAdjacentHTML('afterbegin', 'PUT_HTML_HERE'); }
Sprawdź tutaj, aby uzyskać więcej informacji: Element.insertAdjacentHTML ()
źródło
Aby usunąć węzeł, możesz wypróbować to rozwiązanie, które mi pomogło.
var rslt = (nodee=document.getElementById(id)).parentNode.removeChild(nodee);
źródło
utwórz klasę dla tego przycisku powiedzmy:
`<input type="button" value="+" class="b1" onclick="addRow()">`
Twój js powinien wyglądać tak:
$(document).ready(function(){ $('.b1').click(function(){ $('div').append('<input type="text"..etc '); }); });
źródło
spróbuj podążać za generowaniem
function addRow() { var e1 = document.createElement("input"); e1.type = "text"; e1.name = "name1"; var cont = document.getElementById("content") cont.appendChild(e1); }
źródło
Dodaj kod HTML wewnątrz div za pomocą JavaScript
Składnia:
element.innerHTML += "additional HTML code"
lub
element.innerHTML = element.innerHTML + "additional HTML code"
Usuń kod HTML wewnątrz div za pomocą JavaScript
źródło
<!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>
źródło