使用addEventListener移除Child

问题描述 投票:0回答:4

我刚刚学习javascript。在谷歌 Chrome 控制台上测试东西我最终得到了这个:

<html>

<head></head>
<body>

<div id="divi">

<button id="butti">Click Me</button>

</div>
</body>
</html>

还有Js:

function cBoton (){
 var getDiv = document.getElementById("divi");
  getDiv.removeChild(getDiv.lastChild);
};

var getButton = document.getElementById("butti");
getButton.addEventListener("click", cBoton);

我希望按钮一点击就被删除。 ¿为什么只有在第二次点击后才起作用?

tx!

javascript onclick click addeventlistener removechild
4个回答
0
投票

标记中元素的

.lastChild
""
(尝试使用
console.log(getDiv.lastChild)
进行澄清)。

使用它来确保您正在删除所需的元素:

function cBoton() {
    var getDiv = document.getElementById("divi");
    getDiv.removeChild(getButton);
};

0
投票

第一次单击时,

divi
的最后一个子节点是包含按钮后空格的文本节点,并且该节点将被删除。第二次单击时,该按钮是最后一个子按钮。


0
投票

无价之宝..

修改源码;

/* .css */

div :nth-child(even){background-color: #f2f2f2}

/*.js */

function addDiv() {
var para = document.createElement("p");
var node = document.createTextNode('textHere'); // add cell code here 
para.appendChild(node);
var element;
element = document.getElementById("div1"); // to add div id recursion
element.appendChild(para);
}

function cBoton (){
var getDiv = document.getElementById("div1");
getDiv.removeChild(getDiv.lastChild);
}

var getButton = document.getElementById("div1");
getButton.addEventListener("click", cBoton);

/* HTML */

<html>
<head></head>
<body>
<button onclick="addDiv()">add</button>
<button onclick="cBoton()">Click Me</button>
<frameset><legend>recursions</legend>
<div id="div1"></div>
</frameset>
</body>
</html>

0
投票

副驾驶更新!

您的第一个代码片段需要单击两次才能删除按钮的原因是 DOM(文档对象模型)的结构方式。当您第一次加载页面时,ID 为 divi 的 div 元素只有一个子元素,即按钮元素。但是,当您第一次单击按钮时,由于按钮元素后面有空格或换行符,会在 div 内创建一个文本节点(在 DOM 中被视为子节点)。因此,按钮不再是最后一个子节点,文本节点才是。这就是为什么需要点击两次才能删除按钮。

对于您的第二个代码片段,您似乎试图在单击“添加”按钮时向 div 添加一个段落,并在单击“单击我”按钮时删除 div 的最后一个子级。但是,您的代码中有一个错误。您尝试向 div 添加事件侦听器,而不是“Click Me”按钮。这是更正后的版本:

function addDiv() {
  var para = document.createElement("p");
  var node = document.createTextNode('textHere');
  para.appendChild(node);
  var element = document.getElementById("div1");
  element.appendChild(para);
}

function cBoton() {
  var getDiv = document.getElementById("div1");
  getDiv.removeChild(getDiv.lastChild);
}

var getButton = document.getElementById("butti"); // Corrected here
getButton.addEventListener("click", cBoton);

<html>
<head></head>
<body>
<button id="addButton" onclick="addDiv()">add</button> <!-- Added id here -->
<button id="butti" onclick="cBoton()">Click Me</button> <!-- Added id here -->
<frameset><legend>recursions</legend>
<div id="div1"></div>
</frameset>
</body>
</html>

这应该按预期工作。 “添加”按钮将向 div 添加一个段落,“Click Me”按钮将删除该 div 的最后一个子级。使用 JavaScript 时,请记住始终检查 DOM 的结构和元素的 id。快乐编码!

© www.soinside.com 2019 - 2024. All rights reserved.