javascript - 为什么 push 方法没有将项目添加到数组中?
问题描述
你能告诉我为什么 copy.AllButtons.push 不起作用吗?谷歌浏览器控制台:
HTMLCollection []
0: button.btn.btn-primary
1: button.btn.btn-danger
2: button.btn.btn-warning
3: button.btn.btn-success
length: 4
__proto__: HTMLCollection
script.js:9
[]
length: 0
__proto__: Array(0) <-Why this array is empty?
let all_buttons = document.getElementsByTagName('button');
console.log(all_buttons);
const copyAllButtons = [];
for (let i=0; i < all_buttons.length; i++){
copyAllButtons.push(all_buttons[i]);
}
console.log(copyAllButtons);
#main_container{
width: 75%;
margin: 0 auto;
text-align: center;
}
.flex-box-pick-color{
display: flex;
flex-wrap: wrap;
justify-content: space-around;
}
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Challenge 4</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css">
<link rel="stylesheet" href="style.css">
<script type="text/javascript" src='script.js'></script>
</head>
<body>
<div id='main_container'>
<div class = 'container-2'>
<h2 id='changeMyColor'>Challenge 4: Change the color of all buttons!</h2>
</div>
<div class = 'flex-box-pick-color' id='game'>
<form action=''>
<select name='backdrop' id='background' onchange="buttonColorChange(this)">
<option value="random">Random</option>
<option value="Red">Red</option>
<option value="green">Green</option>
<option value="reset">Reset</option>
</select>
</form>
<button class='btn btn-primary'>Wee!</button>
<button class='btn btn-danger'>Yahoo</button>
<button class='btn btn-warning'>Google!</button>
<button class='btn btn-success'>Facebook!</button>
</div>
</div>
</body>
</html>
解决方案
由于您的脚本在head
,all_buttons
运行时将是一个空集合 - 因此循环中的任何代码都不会实际执行。
你console.log(all_buttons)
是非空的,因为该getElementsByTagName
方法返回一个“实时”集合,并且由于浏览器控制台“懒惰地”记录对象的方式,你看到的是后一个值,而不是你记录它时的那个值。
在几个可能的修复中,最简单和最佳的做法就是将您的脚本移动到body
.
推荐阅读
- continuous-integration - DevOps 和 CI/CD 新手
- python - 在 Python 中使用 Pygame 移动精灵
- java - 如何更改 PApplet GLabel 中的文本颜色
- ruby-on-rails - 使用 capistrano 部署时,Ruby on Rails “KeyError:找不到密钥”
- python - 如何从numpy数组中获取N条记录?
- ruby - RSpec - 如何修复 - ArgumentError:参数数量错误(给定 0,预期为 1) - Ruby
- graphql - graphql sequlize 数据加载器问题,无法为不可为空的字段返回 null
- mysql - 如何显示没有特定值的行?
- r - R中的外部函数调用(arg 1)中的NA / NaN / Inf
- javascript - 在 Angular 中使用 ngFor 在 div 之间画一条线