html - Cloning nodes in Javascript -
i fiddled code here - https://jsfiddle.net/wxd2pw88/2/
html
<body> <input type="text" id="textbox"/> <button type="button" id="addition" onclick="add()"> + </button> <button type="button" id="subtraction" onclick="sub()"> - </button> <div id="replace"></div> </body> js
window.add = function() { var inpt = document.getelementbyid('textbox'); var clone = inpt.clonenode(false); inpt.parentnode.appendchild(clone); var button1 = document.getelementbyid('addition'); button1.parentnode.appendchild(button1.clonenode(true)); var button2 = document.getelementbyid('subtraction'); button2.parentnode.appendchild(button2.clonenode(true)); var div1 = document.getelementbyid('replace'); div1.parentnode.appendchild(div1.clonenode(false)); } window.sub = function() { var clonedtextbox = document.queryselectorall('#textbox'); var clonedbutton1 = document.queryselectorall('#addition'); var clonedbutton2 = document.queryselectorall('#subtraction'); clonedtextbox[clonedtextbox.length-1].parentnode.removechild(clonedtextbox[clonedtextbox.length-1]); clonedbutton1[clonedbutton1.length-1].parentnode.removechild(clonedbutton1[clonedbutton1.length-1]); clonedbutton2[clonedbutton2.length-1].parentnode.removechild(clonedbutton2[clonedbutton2.length-1]); } css
input{ margin: 0px; } div { margin: 3px; } following problems facing:
child nodes of button type of no margin
when "+" button pressed, new child node created. want last child able this. currently, children parent able create children. want last child's "+" button active. other children , parent's button should disabled.
whatever text entering in textbox getting copied children. think because of clone method, tried use createelement method. problem faced when using no child nodes able create children. parent able create multiple child nodes.
first, you're overusing ids, must unique, changed them classes.
second, added variable keep track of number of clones easier access last one.
var numclones = 0; window.add = function () { var inpt = document.queryselectorall('.textbox')[numclones]; var clone = inpt.clonenode(false); clone.value = ""; inpt.parentnode.appendchild(clone); var button1 = document.queryselectorall('.addition')[numclones]; button1.parentnode.appendchild(button1.clonenode(true)); var button2 = document.queryselectorall('.subtraction')[numclones]; button2.parentnode.appendchild(button2.clonenode(true)); button1.disabled = true; button2.disabled = true; var div1 = document.queryselectorall('.replace')[numclones]; div1.parentnode.appendchild(div1.clonenode(false)); numclones++; } window.sub = function () { var clonedtextbox = document.queryselectorall('.textbox')[numclones]; var clonedbutton1 = document.queryselectorall('.addition')[numclones]; var clonedbutton2 = document.queryselectorall('.subtraction')[numclones]; clonedtextbox.parentnode.removechild(clonedtextbox); clonedbutton1.parentnode.removechild(clonedbutton1); clonedbutton2.parentnode.removechild(clonedbutton2); numclones--; if (numclones >= 0) { var lastadd = document.queryselectorall('.addition')[numclones]; var lastsub = document.queryselectorall('.subtraction')[numclones]; lastadd.disabled = false; lastsub.disabled = false; } } edit:
and space line break, put them right after other instead of new line.
Comments
Post a Comment