删除按钮无法正常工作 (DOM)
Delete Button not working properly (DOM)
好的,这就是我想做的...在创建段落时使用 DOM 创建删除按钮和编辑。但是删除按钮似乎总是删除第一段而不是删除相应的段落。这是我的代码:
Javascript:
function writePara()
{
var comment = document.getElementById("usrinput").value;
var newParagraph = document.createElement('p');
newParagraph.textContent = comment;
document.getElementById("updateDiv").appendChild(newParagraph);
var button = document.createElement("button");
var Btext=document.createTextNode("EDIT");
button.appendChild(Btext);
document.getElementById("updateDiv").appendChild(button);
button.onclick =
(
function()
{
var edit = prompt("Type to edit", "");
newParagraph.innerHTML = edit;
}
);
var button2 = document.createElement("button");
var Btext2=document.createTextNode("DELETE");
button2.appendChild(Btext2);
document.getElementById("updateDiv").appendChild(button2);
button2.onclick =
(
function ()
{
var items = document.querySelectorAll("#updateDiv p");
if (items.length)
{
var child = items[0];
child.parentNode.removeChild(child);
}
button.parentNode.removeChild(button);
button2.parentNode.removeChild(button2);
}
);
addBr();
}
伙计们有什么想法吗?
您已经在 writePara
函数中引用了新段落,并且已经在编辑处理程序中使用过一次,那么为什么不在删除处理程序中再次使用它呢?
button2.onclick =
(
function ()
{
newParagraph.parentNode.removeChild(newParagraph);
button.parentNode.removeChild(button);
button2.parentNode.removeChild(button2);
}
);
以下是它的工作原理:http://jsbin.com/nohud/1/edit。在输入中写一些东西,然后在输入中单击几次以生成一些段落。
编辑:上面的代码使用闭包。请务必了解,每次调用 writePara
时,newParagraph
变量都指向一个新的 DOM 元素,并且同一函数中定义的每个单击事件处理程序都可以访问 newParagraph
变量中的该特定元素。因此,每当调用编辑/删除处理程序时,newParagraph
都是在调用writePara
时用来创建关联按钮的元素。
这里有一些代码可以更清楚地解释我所做的:
function init() {
var name = "Mozilla"; // name is a local variable created by init
function displayName() { // displayName() is the inner function, a closure
alert (name); // displayName() uses variable declared in the parent function
}
displayName();
}
init();
它取自这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures。更多内容也在这里:JavaScript闭包如何工作?。
从那里开始newParagraph.parentNode
是包含新段落的容器,因此newParagraph.parentNode.removeChild(newParagraph)
只是从其容器中删除该特定元素。
这是因为您总是给出索引[0],以便其删除第一段,如下所示
var child = items[0];
它应该是
newParagraph.parentNode.removeChild(newParagraph);
相关文章:
- JavaScript DOM insertBefore'工作不正常
- Scriptaculous dom:仅加载工作"有时“;
- JavaScript DOM 更改背景颜色未按预期工作
- 在表单提交将DOM的一部分替换为分部之后,我应该将ajax成功绑定到什么来使我的javascript工作
- Asp.net Ajax事件句柄如何与DOM事件协同工作
- 获取下一个不工作Javascript DOM的同级父节点的子节点
- DOM 节点清理如何在 d3 中工作
- Jquery 和 JS 在 DOM 上工作,而不是在 load
- target=“;帧名“;iframe DOM发生更改时工作
- 使用jquery在dom中移动嵌入的youtube iframe会导致全屏无法在Windows8 IE10中工作
- 如何使非事件javascript指令在插入DOM元素后工作
- IE10IE11显示“;此页面可以't被显示”;在大型DOM上-在firefox中工作
- 浏览器滚动在DOM中是如何工作的
- Angular 指令在从一个 DOM 元素移动到另一个 DOM 元素后停止工作
- 通过DOM工作将PHP变量传递给JavaScript,但可以't将相同的变量从JS传递回PHP
- 只有一个应用程序在DOM中工作
- Javascript-目标DOM在一种情况下工作,而不是在另一种情况
- 修改DOM后,jQuery选择器不工作
- 为什么不;当我使用HTML dom动态添加SMIL动画时,SMIL动画就可以工作了
- 删除按钮无法正常工作 (DOM)