Javascript DOM 使用 javascript 插入 dom 后捕获
Javascript DOM capturing after using javascript to insert dom
我有一个关于 DOM 操作的问题,比如说我使用这个函数插入一个网格:
const grid__container = document.querySelector('.grid__container');
function createVertexes() {
for (let i = 0; i < 9; i++) {
const grid = document.createElement("div");
grid.setAttribute('class', "vertex");
grid.setAttribute('id', i+1);
grid__container.appendChild(grid);
}
}
之后,我尝试使用 document.querySelectorAll("vertex") 获取带有 class“vertex”的所有顶点,但它不起作用:
const vertexes = document.querySelectorAll('.vertex');
此 returns 的控制台日志:
[]
但这行得通:
const vertexes = grid__container.childNodes;
console.log 实际上 returns 所有 9 个 div
我看到区别在于 grid__container 是在我的 HTML 文件中预定义的,但是我以自上而下的方式编写了 querySelectorAll 方法,所以我不明白为什么查询选择器不工作,因为我创建了元素然后试图抓住它,有人知道为什么吗?
我只知道这叫做DOM-manipulation,不知道这个错误的确切名称,我对javascript很陌生,请帮忙。
我希望控制台注销 9 个 div,但我在这里使用 querySelectorAll 的顶点却注销了长度为 0 的节点列表 <NodeList: length 0>
// grab the main container
const grid__container = document.querySelector('.grid__container');
const mole = document.querySelector(".mole");
const timeLeft = document.querySelector("#time__left");
const score = document.querySelector("#score");
let result = 0;
function createVertexes() {
for (let i = 0; i < 9; i++) {
const grid = document.createElement("div");
grid.setAttribute('class', "vertex");
grid.setAttribute('id', i + 1);
grid__container.appendChild(grid);
}
}
// const vertexes = grid__container.childNodes;
const vertexes = document.querySelectorAll('.vertex');
console.log(vertexes);
function randomSquare() {
vertexes.forEach(vertex => {
vertex.classList.remove('mole')
console.log(vertex);
})
let randomVertex = vertexes[Math.floor(Math.random() * 9)]
randomVertex.classList.add('mole');
}
createVertexes();
randomSquare();
* {
box-sizing: border-box;
}
.grid__container {
width: 600px;
height: 600px;
display: flex;
flex-wrap: wrap;
}
.vertex {
height: 200px;
width: 200px;
border: solid black 1px;
}
.mole {
background-color: burlywood;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Whac-a-mole</title>
<link rel="stylesheet" href="./styles.css">
<script src="./app.js" defer></script>
</head>
<body>
<h2>Your score:</h2>
<h2 id="score">Score</h2>
<h2>Time left:</h2>
<h2 id="time__left">Time left</h2>
<div class="grid__container"></div>
</body>
</html>
如果您拼写正确并且 运行 代码在 DOM 完成后并在您需要时获得顶点
,您的代码就可以工作
此外,直到 randomSquare 具有 运行
之后,.mole 才可用
window.addEventListener("DOMContentLoaded", function() {
// grab the main container
const grid__container = document.querySelector('.grid__container');
const timeLeft = document.querySelector("#time__left");
const score = document.querySelector("#score");
let result = 0;
for (let i = 0; i < 9; i++) {
const grid = document.createElement("div");
grid.setAttribute('class', "vertex");
grid.setAttribute('id', i + 1);
grid__container.appendChild(grid);
}
function randomSquare() {
const vertexes = document.querySelectorAll('.vertex');
vertexes.forEach(vertex => {
vertex.classList.remove('mole')
})
let randomVertex = vertexes[Math.floor(Math.random() * 9)]
randomVertex.classList.add('mole');
}
randomSquare();
// const mole = document.querySelector(".mole");
})
* {
box-sizing: border-box;
}
.grid__container {
width: 600px;
height: 600px;
display: flex;
flex-wrap: wrap;
}
.vertex {
height: 200px;
width: 200px;
border: solid black 1px;
}
.mole {
background-color: burlywood;
}
<h2>Your score:</h2>
<h2 id="score">Score</h2>
<h2>Time left:</h2>
<h2 id="time__left">Time left</h2>
<div class="grid__container"></div>
我有一个关于 DOM 操作的问题,比如说我使用这个函数插入一个网格:
const grid__container = document.querySelector('.grid__container');
function createVertexes() {
for (let i = 0; i < 9; i++) {
const grid = document.createElement("div");
grid.setAttribute('class', "vertex");
grid.setAttribute('id', i+1);
grid__container.appendChild(grid);
}
}
之后,我尝试使用 document.querySelectorAll("vertex") 获取带有 class“vertex”的所有顶点,但它不起作用:
const vertexes = document.querySelectorAll('.vertex');
此 returns 的控制台日志:
[]
但这行得通:
const vertexes = grid__container.childNodes;
console.log 实际上 returns 所有 9 个 div
我看到区别在于 grid__container 是在我的 HTML 文件中预定义的,但是我以自上而下的方式编写了 querySelectorAll 方法,所以我不明白为什么查询选择器不工作,因为我创建了元素然后试图抓住它,有人知道为什么吗?
我只知道这叫做DOM-manipulation,不知道这个错误的确切名称,我对javascript很陌生,请帮忙。
我希望控制台注销 9 个 div,但我在这里使用 querySelectorAll 的顶点却注销了长度为 0 的节点列表 <NodeList: length 0>
// grab the main container
const grid__container = document.querySelector('.grid__container');
const mole = document.querySelector(".mole");
const timeLeft = document.querySelector("#time__left");
const score = document.querySelector("#score");
let result = 0;
function createVertexes() {
for (let i = 0; i < 9; i++) {
const grid = document.createElement("div");
grid.setAttribute('class', "vertex");
grid.setAttribute('id', i + 1);
grid__container.appendChild(grid);
}
}
// const vertexes = grid__container.childNodes;
const vertexes = document.querySelectorAll('.vertex');
console.log(vertexes);
function randomSquare() {
vertexes.forEach(vertex => {
vertex.classList.remove('mole')
console.log(vertex);
})
let randomVertex = vertexes[Math.floor(Math.random() * 9)]
randomVertex.classList.add('mole');
}
createVertexes();
randomSquare();
* {
box-sizing: border-box;
}
.grid__container {
width: 600px;
height: 600px;
display: flex;
flex-wrap: wrap;
}
.vertex {
height: 200px;
width: 200px;
border: solid black 1px;
}
.mole {
background-color: burlywood;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Whac-a-mole</title>
<link rel="stylesheet" href="./styles.css">
<script src="./app.js" defer></script>
</head>
<body>
<h2>Your score:</h2>
<h2 id="score">Score</h2>
<h2>Time left:</h2>
<h2 id="time__left">Time left</h2>
<div class="grid__container"></div>
</body>
</html>
如果您拼写正确并且 运行 代码在 DOM 完成后并在您需要时获得顶点
,您的代码就可以工作此外,直到 randomSquare 具有 运行
之后,.mole 才可用window.addEventListener("DOMContentLoaded", function() {
// grab the main container
const grid__container = document.querySelector('.grid__container');
const timeLeft = document.querySelector("#time__left");
const score = document.querySelector("#score");
let result = 0;
for (let i = 0; i < 9; i++) {
const grid = document.createElement("div");
grid.setAttribute('class', "vertex");
grid.setAttribute('id', i + 1);
grid__container.appendChild(grid);
}
function randomSquare() {
const vertexes = document.querySelectorAll('.vertex');
vertexes.forEach(vertex => {
vertex.classList.remove('mole')
})
let randomVertex = vertexes[Math.floor(Math.random() * 9)]
randomVertex.classList.add('mole');
}
randomSquare();
// const mole = document.querySelector(".mole");
})
* {
box-sizing: border-box;
}
.grid__container {
width: 600px;
height: 600px;
display: flex;
flex-wrap: wrap;
}
.vertex {
height: 200px;
width: 200px;
border: solid black 1px;
}
.mole {
background-color: burlywood;
}
<h2>Your score:</h2>
<h2 id="score">Score</h2>
<h2>Time left:</h2>
<h2 id="time__left">Time left</h2>
<div class="grid__container"></div>