关于删除 .error-message 类 这段代码有一些疑问
我贴的是课程的源代码一部分
var submitButton = form.querySelector( "button:not([type=button]), input[type=submit]" );
submitButton.addEventListener( "click", function( event ) {
//获取是所有无效的表单元素
var invalidFields = form.querySelectorAll( ":invalid" ),
errorMessages = form.querySelectorAll('.error-message'),
parent;
console.log(errorMessages)
for ( var i = 0; i < errorMessages.length; i++ ) {
errorMessages[ i ].parentNode.removeChild( errorMessages[ i ] );
}
errorMessages是获取JS动态添加的div,errorMessages[i].parentNode是获取下标为i的errorMessages元素的父级元素,.removeChild(errorMessages[i]),是移除父级元素的下标为i的errorMessages子元素。
如果上面我的是对的话,那么i=1时,那么就是父元素移除的是errorMessages[1]的元素,可是父元素下面只有一个errorMessages的类,所以应该下标为0,为什么也能达到删除作用,请问老师我是哪里理解有偏差呢?
正在回答
是两个获取元素方法返回值的不同,querySelectorAll 的返回值是一个静态的 NodeList 对象,而 getElementsByClassName的返回值实际上是一个 HTMLCollection 对象 ,是一个动态的,会根据元素的变化而变化。
如果使用getElementsByClassName获取错误元素,开始的长度为2,当删除一个之后,长度变为1,此时i的值增加为1,1<1,不符合条件,所以第二个错误信息就不会再删除了。
自己可以再理解下。
- 参与学习 人
- 提交作业 2198 份
- 解答问题 5012 个
如果你有web端基础,既想进阶,又想进军移动端开发,那就来吧,我们专题为你带来的课程有HTML5、CSS3、移动基础、响应式、bootstrap、less等,让你在前端道路上畅通无阻!
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星