JS错误写法[清除DOM]
前言
我现在总结一下我之前敲代码犯的错误,清除DOM元素,我们开始写代码吧!
HTML
<h1 style="font-size: 18px;font-weight: bold;color:rgba(255,128,128,1)">测试</h1>
<div id="JiJi">
</div>
<input type="button" value="创建邮箱" id="CreateEmail" onclick="CreateEmail()" />
<input type="button" value="清除邮箱" id="ClearEmail" onclick="ClearEmail()" />
JS
var Email = [
"@qq.com",
"@163.com",
"@gamil.com",
"@126.com",
"@yahoo.com",
"@sina.com",
"@hotmail.com",
"@foxmail.com",
]
function CreateEmail() {
for(var i = 0;i< Email.length;i++) {
document.querySelectorAll("#JiJi")[0].innerHTML += "<p>"+Email[i]+"</p>"; }
}
function ClearEmail() {
for(var i = 0; i < document.querySelectorAll("#JiJi p").length;i++) {
document.querySelectorAll("#JiJi p")[i].remove(); }
}
CreateEmail()方法是创建数组里的数据
ClearEmail()方法是清除页面上创建的DOM元素
我们打开浏览器运行看一下

点击创建邮箱

成功创建出了一些邮箱
我们试一下清除邮箱

我们发现居然没清除成功,这样就违背了我们想要清空邮箱的意愿
看一下清除的代码
for(var i = 0; i < document.querySelectorAll("#JiJi p").length;i++) {
document.querySelectorAll("#JiJi p")[i].remove();
}
实际上,我们清除是从头开始清除的,这样清除就会导致每清除一行,下一行DOM元素就会就会向上移动,也就是索引-1,就相当于相隔一行才清除一次DOM,这样是没办法一次性清除完成的,我们必须从DOM的最后一个元素开始清除,毕竟我们是从头创建的,就必须从尾部清除才能清空
改下正确写法
for(var i=document.querySelectorAll("#JiJi p").length-1;i >= 0;i--) {
document.querySelectorAll("#JiJi p")[i].remove();
}
/解释for(var i = 创建DOM元素的索引-1;i>=0;i–)
现在再看一下

清除完成了
完整代码
<html>
<head>
<meta charset="utf-8" />
<title>封装JS</title>
</head>
<body>
<h1 style="font-size: 18px;font-weight: bold;color:rgba(255,128,128,1)">测试</h1>
<div id="JiJi">
</div>
<input type="button" value="创建邮箱" id="CreteEmail" onclick="CreteEmail()" />
<input type="button" value="清除邮箱" id="ClearEmail" onclick="ClearEmail()" />
</body>
<script>
var Email = [
"@qq.com",
"@163.com",
"@gamil.com",
"@126.com",
"@yahoo.com",
"@sina.com",
"@hotmail.com",
"@foxmail.com",
]
function CreteEmail() {
for (var i = 0; i < Email.length; i++) {
document.querySelectorAll("#JiJi")[0].innerHTML += "<p>" + Email[i] + "</p>";
}
}
function ClearEmail() {
//正确写法
for (var i = document.querySelectorAll("#JiJi p").length - 1; i >= 0; i--) {
document.querySelectorAll("#JiJi p")[i].remove();
}
//错误写法
// for(var i = 0; i < document.querySelectorAll("#JiJi p").length;i++) {
// document.querySelectorAll("#JiJi p")[i].remove();
// }
}
</script>
</html>
后言
这错误,新手都会犯,将它写出来,帮助更多的新手 本文结束了,如果觉得本技术文章对你有帮助请给我点个赞,如果有什么不足的地方,给我提意见,让我加以改进
JS错误写法[清除DOM]的更多相关文章
- JS文件写法操作,DOM基本操作
js文件写法.规范 // 定义全局变量 var num = 0;//这个是用来记数的. // 页面加载完成 window.onload = funtion(){ intVar();//初始化变量 s ...
- HTML5几种常见的错误写法
本文介绍了HTML5常见的6种错误写法,包括:1.不要使用section作为div的替代品 2.只在需要的时候使用header和hgroup 3.不要把所有列表式的链接放在nav里 4.figure元 ...
- js,JavaScript,a标签onclick传递参数不对,A标签调用js函数写法总结
错误示例: <a href="javascript:waterLineEdit(${goods.goods_id})" >修改 </a> <!-- 浏 ...
- jquery 给input赋值错误写法
<script type="text/javascript"> var ue = UE.getEditor('container'); function getCont ...
- angular js 自定义js错误处理(Angularjs js error handler)
使用AngularJS的时候,对JS错误如何自定义处理?(比如用Google Analytics记录angularjs使用中出现的js错误) AngularJS自带一个错误处理service:$exc ...
- 捕获JS 错误日志
最近在做项目的过程中,发现很多JS报错没有引起重视,我就想想把JS错误捕获了,然后展示在我们一个平台上 具体实现代码: window.onerror = function(message, url, ...
- JQuery validate 在IE兼容模式下出现 js错误(成员找不到)的修正:
JQuery validate 在IE兼容模式下 下出现 js错误(成员找不到)的修正: // Add novalidate tag if HTML5. //this.attr( "nova ...
- Fundebug上线Node.js错误监控啦
作为全栈JavaScript错误实时监测平台,Fundebug的Node.js实时错误监测服务上线啦,我们能够帮助开发者及时,高效地发现并且解决Node.js错误,从而提高开发效率,并提升用户体验. ...
- 前端监控系统(二)JS错误日志收集篇
前端监控系统 目前已经上线,欢迎使用! 服务器搭建好了,可以着手开发了. 其实前端需要分析的数据有很多,包括,PVUV, 接口请求统计,耗时统计,JS错误统计,用户使用设备统计,用户地域分布,页面用户 ...
随机推荐
- java键对值SHA256加密接口请求
import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.htt ...
- yum 安装提示公钥安装失败,Public key for .x86_64.rpm is not instal 手动导入公钥方案
Linux 中yum 安装google-chrome-stable时,报错如下,提示公钥安装失败,原因是 GPG公钥获取失败,无法连接获取到 https://dl-ssl.google.com/lin ...
- 熟悉ifos项目的记录吧
1.首页关联的:在 default-navigation-model.xml里 2.输入框改成下拉列框 第一步,找到需要修改的view的包,新建一个view obj 第二步,在query里写上需要找的 ...
- @Embedded 和 @Embeddable
自定义类型在hibernate中实现自定义类型,需要去实现UserType接口即可或者以Component的形式提供. JPA的@Embedded注解有点类似,通过此注解可以在Entity模型中使用一 ...
- if-else 条件语句
1. 条件语句模型 Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳 ...
- JVM学习(二)JVM加载类
一.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构 ...
- 【Java并发编程】面试常考的ThreadLocal,超详细源码学习
目录 ThreadLocal是啥?用来干啥? ThreadLocal的简单使用 ThreadLocal的实现思路? ThreadLocal常见方法源码分析 ThreadLocal.set(T valu ...
- 基础篇:详解锁原理,volatile+cas、synchronized的底层实现
目录 1 锁的分类 2 synchronized底层原理 3 Object的wait和notify方法原理 4 jvm对synchronized的优化 5 CAS的底层原理 6 CAS同步操作的问题 ...
- 你用对锁了吗?浅谈 Java “锁” 事
每个时代,都不会亏待会学习的人 大家好,我是yes. 本来打算继续写消息队列的东西的,但是最近在带新同事,发现新同事对于锁这方面有一些误解,所以今天就来谈谈"锁"事和 Java 中 ...
- Arduino 模拟引脚
Arduino的模拟引脚的引用,网上不错的一篇文章 参考:http://blog.sina.com.cn/s/blog_156e62ef90102xjio.html 模拟引脚 本文是对于Arduino ...