javascript - 为什么 removeChild 函数对列表项和 i 标记的行为不同?
问题描述
我注意到 removeChild 的行为与其他元素(如列表项)不同。我将 i 标签用于 frontAwesome 中的一些图标,并希望在单击按钮时单独删除这些项目。
不幸的是,只有当我使用 removeChild() 函数两次时,我才能删除每个 i 标签元素。(诡异的!)
这是怎么回事?
HTML:
<div id="myFonts">
<i>1</i>
<i>2</i>
<i>3</i>
<i>4</i>
<i>5</i>
</div>
Javascript:
function FunctionTwo() {
var font = document.getElementById("myFonts");
font.removeChild(font.childNodes[0]);
}
https://codepen.io/anon/pen/EeaYvL
编辑 注意:是否使用 LineBreaks 会有所不同!
<ul id="myList">
<li>Coffee</li>
<li>Tea</li>
<li>Milk</li>
</ul>
这里有 6 个子节点。显然,LineBreaks 也被视为子节点!
<ul id="myList"><li>Coffee</li><li>Tea</li><li>Milk</li></ul>
这里有 3 个子节点。奇怪 - 这是一个错误吗?
解决方案
来自MDN,
childNodes 包括所有子节点,包括非元素节点,如文本和评论节点。要获取仅包含元素的集合,请改用 ParentNode.children。
因此,在这两种情况下,元素都被奇怪地删除了。你应该更新
从
font.removeChild(font.childNodes[0]);
至
font.removeChild(font.children[0]);
推荐阅读
- angular - 在 Angular 中订阅和更新 URL 查询变量的正确方法?
- c - 如何使用蜂窝设备在 Zephyr OS 上实现 MQTT?
- patch - 为什么这个 mercurial 补丁不移动文件?
- gsoap - 如何同时遵守 1.01 和 1.02 版本的 ONVIF 标准
- python - 我如何将此函数添加到 python discord bot 中并让它打印到 discord
- arrays - 应用程序重新启动时数组未保存。持久数据的问题
- python - 分类任务中的scipy矩阵到numpy数组
- ios - 在 Xcode 的新构建系统中强制复制文件的捆绑资源
- r - sparklyr antijoin 中的近似双重比较
- php - 将 PHPUnit 与 PHP-DI 一起使用