要添加document.body.appendChild,还要删除parentNode.removeChild?

时间:2017-11-15 02:26:52

标签: javascript

我已经决定是时候以比我过去使用它更正式,更随意的方式学习javascript。

所以我去developer.mozilla.org学习他们的教程。

他们提供的第一个教学练习之一是在https://developer.mozilla.org/en-US/docs/Learn/JavaScript/First_steps/A_first_splash的题为“A First splash into JavaScript”的文章中,他们在其中创建了一个简单的数字猜谜游戏。

在该游戏的代码中,练习会创建一个名为setGameOver的函数,该函数会创建一个标记为“开始新游戏”的按钮。

该按钮的代码是:

document.body.appendChild(resetButton);

接下来是另一个名为resetGame的函数,其中该按钮从页面中删除:

resetButton.parentNode.removeChild(resetButton);

我的问题是:如果添加按钮的代码是document.body.appendChild,为什么不删除像document.body.removeChild这样的按钮的代码?

为什么我们必须改用parentNode.removeChild?

这就是编码教程让我疯狂的事情。他们引入了一个新命令,他们没有解释原因。他们只是说实际上,“这是你删除按钮的方式”,他们就把它留在了那里。啊!

1 个答案:

答案 0 :(得分:1)

有很多方法可以删除并向页面添加元素,这恰好是教程作者选择演示的方式。也许他们的目的是证明你实际上可以通过document.body访问resetButton.parentNode,我们永远不会知道。

这里的要点是你可以通过访问它的父节点来删除该按钮。在这种情况下,我们知道document.body是其父节点(我们向该元素添加了按钮,因此它必须是父节点),因此在这种情况下resetButton.parentNode和{{1} }引用相同的对象,并且在功能上是等效的。

document.body

如果你有对特定html节点的引用(在这种情况下,var node1 = document.body; node1.appendChild(resetButton); // resetButton is now a child of node1 (and document.body, its the same object) var node2 = resetButton.parentNode; // we now know that node2 == node1 so we could do either of the following: node1.removeChild(resetButton); // -- or -- node2.removeChild(resetButton); )而知道父节点是什么,那么使用resetButton来找到父母将是正确的方法。如果您知道父母(因为您刚刚添加了它),那么您执行此操作的方式并不重要。