Je veux pouvoir ajouter plusieurs lignes à un div et les supprimer. J'ai un bouton '+' en haut de la page pour ajouter du contenu. Ensuite, à droite de chaque ligne, un bouton "-" sert à supprimer cette ligne. Je n'arrive pas à comprendre le code javascript dans cet exemple.
Ceci est ma structure HTML de base:
<input type="button" value="+" onclick="addRow()">
<div id="content">
</div>
C'est ce que je veux ajouter à l'intérieur du contenu 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()">
Vous pouvez faire quelque chose comme ça.
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);
}
Pour supprimer le noeud, vous pouvez essayer cette solution, il m'a aidé.
var rslt = (nodee=document.getElementById(id)).parentNode.removeChild(nodee);
Vous pouvez utiliser cette fonction pour ajouter un enfant à un élément 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);
}
À ma plus grande surprise, je vous présente une méthode DOM que je n'avais jamais utilisée auparavant pour rechercher cette question et trouver l'ancien insertAdjacentHTML
sur MDN (voir CanIUse? InsertAdjacentHTML pour un tableau de compatibilité assez vert).
Donc, en l'utilisant, vous écririez
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>
s'il vous plaît essayez de suivre pour générer
function addRow()
{
var e1 = document.createElement("input");
e1.type = "text";
e1.name = "name1";
var cont = document.getElementById("content")
cont.appendChild(e1);
}
faire une classe pour ce bouton permet de dire:
`<input type="button" value="+" class="b1" onclick="addRow()">`
votre js devrait ressembler à ceci:
$(document).ready(function(){
$('.b1').click(function(){
$('div').append('<input type="text"..etc ');
});
});