我正在尝试通过getElementsByClassName
收集这些HTML对象,并将它们推送到JavaScript数组中,然后我想创建一个JavaScript alert
来显示这些名称。我一直在尝试这几个小时。我做错了吗?
var names = []
var elm = document.getElementsByClassName('name');
names.push(elm);
var arr = names.join();
alert(arr)

<h2>
List of People:
</h2>
<ul class='people'>
<li class='name'>
Clara
</li>
<li class='name'>
James
</li>
<li class='name'>
Sara
</li>
</ul>
&#13;
答案 0 :(得分:3)
getElementsByClassName
不会在元素中提供文本,而是提供元素本身。
此外,您不会将它们作为正确的JavaScript数组,而是HTMLElements的集合。
以下是您可以做的事情:
var names = []
var elements = document.getElementsByClassName('name');
for(var i=0; i<elements.length; i++) names.push(elements[i].textContent)
var nameList = names.join()
alert(nameList)
或者,您可以使用Array.from
和map
:
Array.from(elements).map((elem) => elem.textContent)
请注意,我正在使用elements[i].textContent
来获取每个元素中的文本。
答案 1 :(得分:0)
只需尝试使用querySelectorAll()
。然后应用Nodelist#forEach()
来迭代节点列表。最后使用您想要的元素或元素属性推送到数组
var names = []
var elm = document.querySelectorAll('.name').forEach(function(a){
names.push(a.innerHTML);
});
var arr = names.join();
console.log(arr);
alert(arr)
<h2>
List of People:
</h2>
<ul class='people'>
<li class='name'>
Clara
</li>
<li class='name'>
James
</li>
<li class='name'>
Sara
</li>
</ul>
答案 2 :(得分:0)
当我们按类名调用元素时,它返回数组,因此你运行循环...
<ul class='people'>
<li class='name'>
Clara
</li>
<li class='name'>
James
</li>
<li class='name'>
Sara
</li>
var names = []
var elm = document.getElementsByClassName('name');
for(var i = 0; i < elm.length; i++) {
names.push(elm[i].innerHTML);
}
names.join();
alert(names);
这里是jsfiddle运行示例https://jsfiddle.net/9pt0hf0s/1/