为什么for()循环不起作用?
why this for()loop isn't working?
我有多个具有相同类名的元素。
我试图一次改变每个元素的类名。
所以我尝试了这个js句子。
function chngeClass2(from, to){ //chngeClass() is change class name of an element, using its id.
var before;
before = document.getElementsByClassName(from);
for(i=0,len=before.length ; i<len ; i++){
before[i].className = to;
}
}
chngeClass2('test', 'test_ani');
但是它不工作。
我不知道为什么。
为什么这个代码不能工作?有什么问题吗?
getElementsByClassName()
函数返回一个实时 DOM节点列表。它是"活的"意味着当你改变所涉及的元素时,列表也会改变。当你改变一个元素的类时,它就不在列表中了!
您可以通过在更改任何元素之前将节点列表复制到普通数组中来处理该问题,或者简单地使用while
循环迭代,直到列表为空,每次迭代只查看第一个元素:
var before = document.getElementsByClassName(from);
while (before.length)
before[0].className = to;
你可能还想添加一个测试来确保"to"不是一个包含"from"类的字符串,否则循环将永远不会终止。事实上,因为在像你这样的函数的一般情况下很难判断是否存在无限循环,所以使用数组复制方法可能会更容易:
var before = document.getElementsByClassName(from);
before = [].slice.call(before, 0);
for (var i = 0; i < before.length; ++i)
before[i].className = to;
当你改变类名,该元素不存在,假设你有4个元素的类,所以当你改变第一节课,你有3类和当你改变第二个类,2班仍然但侧吹风的循环调用,达到before[2]
,它导致一个错误,因为它寻找侧吹风元素但你只有2元素后第一次和第二次更改。
:
function chngeClass2(from, to){
var before;
before = document.getElementsByClassName(from);
for(i=0,j=before.length ; i<j ; i++){
before[0].className = to;
}
}
chngeClass2('test', 'test_ani');
检查JSFiddle Demo
相关文章:
- 我的javascript for循环不起作用
- javascript for循环不起作用
- 循环通过数组的If语句不起作用
- 为什么我的While循环不起作用
- JS(node.js)而循环不起作用
- 来自MDN的循环示例的JavaScript不起作用
- Mustache.js每个循环都不起作用
- for循环中的jquery.load()不起作用
- For循环与数组不起作用
- JavaScript For循环与For in不起作用
- 为什么我所有的循环都不起作用
- JavaScript 数组/循环不起作用
- Javascript if-else循环不起作用
- 循环浏览页面上所有选中的复选框并将id拉入数组不起作用
- JavaScript的循环问题,将值插入数组将不起作用
- Javascript getElementsByName在PHP循环中不起作用
- Javascript循环数组无限不起作用
- 如果循环停止并且不起作用
- if-else循环和jquery在热应用程序或冷应用程序中不起作用
- 循环变量的Javascript不起作用