javascript - Vanilla JS:如何返回动态 html 以便在 element.innerHTML 中重用它?
问题描述
我正在构建的内容: 大家好,我正在尝试构建一个记忆游戏,为了做到这一点,我必须洗牌并将卡片重新插入 HTML。
问题: 我在将洗牌后的 HTML 重新插入 DOM 时遇到了问题,因为它似乎返回了值“null”。
我试图解决这个问题
我创建了函数 createHTML,它旨在编译由 generateCardHTML 生成的所有 html,并返回 html。然而,'return deck' 似乎没有做任何事情,尽管 console.log(deck) 完全按照我的预期返回了 html。
cards = ['card1', 'card1',
'card2','card2',
'card3','card3',
];
function initGame() {
const shuffledCards = shuffle(cards);
// generates each li
function generateCardHTML(card) {
return `<li class="card"><i class="${card}"></i></li>`
};
// PROBLEM BEGINS HERE
function createHTML(){
let deck = "";
shuffledCards.forEach(function(card) {
const genHTML = generateCardHTML(card);
deck += genHTML;
})
return deck;
};
createHTML();
};
initGame();
const gameDeck = document.querySelector('.card');
gameDeck.innerHTML = initGame();
// Shuffle function from http://stackoverflow.com/a/2450976
function shuffle(array) {
var currentIndex = array.length, temporaryValue, randomIndex;
while (currentIndex !== 0) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
我发现最接近我的问题的是这个,但它似乎没有解决同样的问题。要么,要么我太缺乏经验,无法理解。
解决方案
因为 initGame() 没有返回值,所以您必须返回一个值,该值是createHTML()
在这种情况下的返回值。
像这样
cards = ['card1', 'card1',
'card2', 'card2',
'card3', 'card3',
];
function initGame() {
const shuffledCards = shuffle(cards);
// generates each li
function generateCardHTML(card) {
return `<li class="card"><i class="${card}"></i> ${card}</li>`
};
function createHTML() {
let deck = "";
shuffledCards.forEach(function(card) {
const genHTML = generateCardHTML(card);
deck += genHTML;
})
return deck;
};
// NEED TO RETURN SOMETHING
return createHTML();
};
// THERE IS NO NEED FOR THIS
// initGame();
const gameDeck = document.querySelector('.card');
gameDeck.innerHTML = initGame();
// Shuffle function from http://stackoverflow.com/a/2450976
function shuffle(array) {
var currentIndex = array.length,
temporaryValue, randomIndex;
while (currentIndex !== 0) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
}
<ul class='card'></ul>
我还将card
值添加到li
as 文本中,以便您可以看到它,尝试运行代码,您将获得正确的输出
推荐阅读
- windows - 并行执行 shell 命令但限制作业(没有 Cygwin 的 Windows)
- c - 在 C 中创建字符串值并将其添加到二维数组
- python - pymongo.errors.ServerSelectionTimeoutError
- sql - 更新期间出错
- python - 用python 3编写的单词搜索拼图生成器陷入无限循环
- javascript - 使用 AJAX / JSON 数据将图像 ID 传递给模态
- c# - REGDB_E_CLASSNOTREG 在应用程序池回收后使用 MsgPack Serializer 时
- python - 如何更改 seaborn 图形级别图的刻度限制和频率(FacetGrid)
- twig - TWIG 输出不正确的 DOM 结构
- php - Auth::attempt 总是返回 false 并且我无法使用其他问题来解决它,在这里