You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

开发记忆游戏时调用appendChild()报错:appendChild不是函数,求帮助

解决appendChild is not a function错误及记忆游戏初始化代码修复

嘿,我来帮你搞定这个问题!咱们先从你遇到的核心错误说起,再把代码里的其他小问题一起修正,让你的记忆游戏能正常跑起来~

核心错误原因:theDeck不是单个DOM元素

你用document.getElementsByClassName('deck')获取的是一个HTMLCollection(类数组对象),它包含了所有带deck类的元素,而这个集合本身并没有appendChild方法。这就是报错的根源!

修复方式:

把获取deck元素的代码改成下面二选一:

  • 使用querySelector直接获取第一个匹配的元素:
    let theDeck = document.querySelector('.deck');
    
  • 或者从HTMLCollection里取第一个元素:
    let theDeck = document.getElementsByClassName('deck')[0];
    

代码里的其他问题及修复

除了上面的错误,你的初始化代码还有几个小问题需要调整:

  1. 循环中引用错误的变量:在创建卡片的innerHTML里,你写的是cardSet,但应该引用循环的当前图标类名(也就是forEach的参数)。
  2. 只添加了最后一张卡片:你每次循环都覆盖cards变量,最后只把最后创建的卡片添加到deck里,应该在循环内部就把每一张卡片追加到deck中。
  3. 洗牌函数的调用:确保你的shuffle函数是正确的洗牌实现(比如Fisher-Yates算法),否则卡片不会被正确打乱。

修正后的完整代码

const cardSet = ['fa-diamond','fa-diamond','fa-paper-plane-o','fa-paper-plane-o','fa-anchor','fa-anchor','fa-bolt','fa-bolt','fa-cube','fa-cube','fa-leaf','fa-leaf','fa-bicycle','fa-bicycle','fa-bomb','fa-bomb']; 
let cardsOpen = []; 
let cardsflipped = 0; 
// 改用querySelector获取单个deck元素
let theDeck = document.querySelector('.deck'); 

// Fisher-Yates洗牌实现(如果还没实现,加上这个)
function shuffle(array) {
  let currentIndex = array.length, randomIndex;
  while (currentIndex != 0) {
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex--;
    [array[currentIndex], array[randomIndex]] = [array[randomIndex], array[currentIndex]];
  }
  return array;
}

window.onload = function startGame(){ 
  shuffle(cardSet); 
  // 遍历打乱后的卡片集合,创建每一张卡片并添加到deck
  cardSet.forEach(function(iconClass){ 
    const card = document.createElement('li'); 
    card.classList.add('card');
    // 这里用当前循环的iconClass,而不是整个cardSet数组
    card.innerHTML = `<i class="fa ${iconClass}"></i>`; 
    theDeck.appendChild(card); 
  }); 
}; 

这样修改后,你的初始化函数就能正常创建并添加所有卡片到deck里,不会再出现appendChild is not a function的错误啦~

内容的提问来源于stack exchange,提问作者Abdo Choufani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:17