javascript - 为什么我的 JS DOM 操作结果未定义且未更改 HTML?
问题描述
我正在尝试通过单击它们来更改我的 HTML 中的图像。
当我在控制台中记录结果时,它会记录“未定义”。当我单击图像并且看不到 HTML 的任何更改时,我也没有任何效果。
const flipAllCards = function () {
for(const card of cards) {
card.innerHTML.replace(`<img src="img/cardback.jpeg" alt="">`)
}
};
const cards = document.querySelectorAll(".card");
flipAllCards();
function assignImages () {
for(const card of cards) {
const cardName = card.id;
const imageName = `${cardName}.jpeg`;
function flipCard (card) {
card.innerHTML.replace(`<img src="img/${imageName}" alt="">`);
}
console.log(flipCard(card));
card.addEventListener('click', flipCard(card));
}
}
assignImages();
和 HTML:
<div class="table">
<div class="card" id = "agentbrown"><img src="img/agentbrown.jpeg" alt=""></div>
<div class="card" id = "agentjones"><img src="img/agentjones.jpeg" alt=""></div>
<div class="card" id = "agentsmith"><img src="img/agentsmith.jpeg" alt=""></div>
<div class="card" id = "spoonboy"><img src="img/spoonboy.jpeg" alt=""></div>
<div class="card" id = "switch"><img src="img/switch.jpeg" alt=""></div>
<div class="card" id = "trinity"><img src="img/trinity.jpeg" alt=""></div>
</div>
解决方案
第一个问题,是的,它正在打印 undefined 因为你实际上并没有返回任何东西。当您尝试登录未返回的内容时,它本质上将是未定义的。在下面的片段中,我对其进行了编辑以返回 innerHTML,以便您可以看到输出。
第二个问题,如果您要替换内容,您不想使用innerHTML.replace,您只想做innerHTML = 新内容。
.replace 试图替换特定的字符子集,而不是替换内容。
最后,由于您传递它的方式,您会立即调用您的点击。您需要将其包装在匿名函数中,以便仅在单击时调用它。
此外,在下面的代码段中,我将 WAFFLES 这个词附加到您的每个更改中,以便您可以实际看到更改。
const flipAllCards = function () {
for(const card of cards) {
card.innerHTML = `<img src="img/cardback.jpeg" alt="">`;
}
};
const cards = document.querySelectorAll(".card");
function assignImages () {
for(const card of cards) {
const cardName = card.id + "WAFFLES";
const imageName = `${cardName}.jpeg`;
function flipCard (card) {
card.innerHTML = (`<img src="img/${imageName}" alt="">`);
return card.innerHTML;
}
console.log(flipCard(card));
card.addEventListener('click', function(){flipCard(card)});
}
}
assignImages();
<div class="table">
<div class="card" id = "agentbrown"><img src="img/agentbrown.jpeg" alt=""></div>
<div class="card" id = "agentjones"><img src="img/agentjones.jpeg" alt=""></div>
<div class="card" id = "agentsmith"><img src="img/agentsmith.jpeg" alt=""></div>
<div class="card" id = "spoonboy"><img src="img/spoonboy.jpeg" alt=""></div>
<div class="card" id = "switch"><img src="img/switch.jpeg" alt=""></div>
<div class="card" id = "trinity"><img src="img/trinity.jpeg" alt=""></div>
</div>
编辑:还编辑了您的 flipAllCards 函数,因为它也是错误的。替换 innerHTML 时,您只想使用 = 而不是 .replace。你现在想说的是:替换内容
您可以在下面看到更好的表示。
var element = document.getElementById('test');
// THIS WON'T UPDATE
element.innerHTML.replace('I love waffles!', 'juice is terrible');
// THIS WILL UPDATE
element.innerHTML = 'juice is amazing with waffles';
<div id="test">
I love waffles!
<div>
推荐阅读
- node.js - 使用 Node.js 发送批量 SMS 时的 Twilio API 和指数退避
- android - Ionic 3 API 28 及以上问题
- python - 如何在流数据中将复杂字典创建到 Pandas DataFrame 中
- pandas - 熊猫图上的字体崩溃
- sql - ORDER BY SQLite 中的别名
- yocto - Yocto 和 TPM:最终图像上缺少 /dev/tpm
- prometheus - Prometheus:错误:404,响应正文:尝试使用 PushGateway 推送指标时找不到 404 页面
- r - R - shp 文件中的 rgdal ERRO - 层
- javascript - eventlistener beforeunload 在反应中不起作用
- python - 重叠图例:如何将 geopandas 图例放在地图旁边?