在元素数组上循环只会影响最后一个元素
looping over array of elements just affects the last element
在我刚刚发现的一个项目中,有时对html元素数组进行迭代(并更改所有元素)只会影响最后一个元素。当我记录元素的属性时,我可以看到循环明确地处理了每个元素,但显然只有最后一个元素发生了变化。
有人能解释一下为什么吗?
我已经发现,解决方案是使用createElement()和appendChild(),而不是insertHTML。我只是想了解javascript为什么会这样。
这是我的示例代码:
/* creating 5 elements and storing them into an array */
var elementArray = [];
for(var n = 0;n<5;n++)
{
document.body.innerHTML += "<div id='elmt_"+n+"'>"+n+"</div>'n";
elementArray[n] = document.getElementById("elmt_"+n);
}
/* loop over these 5 elements */
for(var n = 0;n<5;n++)
{
console.log(elementArray[n].id); // logs: elmt_0 elmt_1 elmt_2 elmt_3 elmt_4
elementArray[n].innerHTML = "test"; // changes just the last element (elmt_4) to "test"
}
我在这里创建了一个示例:http://jsfiddle.net/qwe44m1o/1/
1-在第二个循环中使用console.log(elementArray[n]);
表明,此循环中的innerHTML正在修改数组中的html,而不是文档中的html。这意味着您将div元素存储在数组中,而不是document.getElementById("elmt_"+n)
的快捷方式
参见JSFiddle
2-如果你想存储一个快捷方式来按ID定位元素,你必须为elementArray[n] = "document.getElementById('elmt_"+n+"')";
添加引号,并将其与eval
一起使用,如下所示:eval(elementArray[n]).innerHTML = n+"-test";
请参阅此尝试的JSFiddle
相关文章:
- 如何在不影响其他元素的情况下扩展DIV
- JavaScript-在不影响索引的情况下将元素插入数组
- 在元素数组上循环只会影响最后一个元素
- 阻止Javascript事件影响子元素
- jQuery:影响相同深度的列表元素
- Javascript不会影响HTML元素
- 是否有任何CSS属性对其元素没有影响
- CSS只影响容器中的元素
- 骨干,如何确保在视图中声明的函数只影响该视图中的DOM元素
- 对于具有相同类的多个元素,只影响jquery中单击的元素
- document.getElementsByClassName不会影响元素
- 元素影响了 JavaScript 等效项
- 影响 JavaScript 中的 CSS 元素
- 解除所有元素上的所有 jQuery 事件的性能影响
- 在不影响布局的情况下降低鼠标悬停元素周围的灵敏度的简单方法是什么
- 如何让导入的 css 字体/图标对影子 dom 中的元素产生影响
- Jquery 只影响悬停在类中的一个元素
- jQuery.text() - 如何在不影响任何子元素的情况下更改标签的文本
- 影响类的所有成员而不是一个元素事件的插件正在发生
- 让一个元素影响多个图像