通过类名获取元素后无法设置innerHTML,求解决方法
解决设置innerHTML无效的问题
你代码里的核心问题是:document.getElementsByClassName返回的是一个HTMLCollection类数组对象,包含所有匹配类名的元素。你在循环里直接操作elements.innerHTML,是在给这个集合对象设置属性,而不是给每个具体元素设置内容。
修正后的基础代码(替换元素内容)
把elements.innerHTML改成elements[i].innerHTML,操作循环里的单个元素:
var elements = document.getElementsByClassName('name-of-element'); for(var i=0; i<elements.length; i++) { elements[i].innerHTML = 'the change I am trying to make'; }
实现添加引用的需求(追加内容而非替换)
如果你是要在现有元素内容后面添加一段引用,而不是完全替换原有内容,应该用innerHTML +=来追加:
var elements = document.getElementsByClassName('name-of-element'); var quote = '<blockquote>这里是你要添加的引用内容</blockquote>'; for(var i=0; i<elements.length; i++) { elements[i].innerHTML += quote; }
更简洁的现代写法(可选)
如果你的运行环境支持ES6+,可以用querySelectorAll配合forEach,代码更直观:
document.querySelectorAll('.name-of-element').forEach(element => { element.innerHTML += '<blockquote>这里是你要添加的引用内容</blockquote>'; });
内容的提问来源于stack exchange,提问作者MS.
相关产品推荐
相关产品推荐

