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

如何编写JavaScript if语句检测HTML元素内容实现井字棋获胜弹窗

你的实现思路是完全可行的,对新手来说逐个写8种获胜情况的判断逻辑清晰、容易调试,完全可以先用这种方式实现。
你之前的测试代码的问题在于只判断了单个格子的内容,且如果代码执行时机不对(比如页面加载时就运行,此时格子还没有被赋值),就不会生效。

下面是直接可用的简单实现:

第一步:编写获胜判断函数

// 传入当前落子玩家的符号 'X' 或 'O',判断是否获胜
function checkWin(player) {
  // 第一行获胜
  if (
    document.getElementById('topLeft').textContent === player &&
    document.getElementById('topCenter').textContent === player &&
    document.getElementById('topRight').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 第二行获胜
  if (
    document.getElementById('middleLeft').textContent === player &&
    document.getElementById('middleCenter').textContent === player &&
    document.getElementById('middleRight').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 第三行获胜
  if (
    document.getElementById('bottomLeft').textContent === player &&
    document.getElementById('bottomCenter').textContent === player &&
    document.getElementById('bottomRight').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 第一列获胜
  if (
    document.getElementById('topLeft').textContent === player &&
    document.getElementById('middleLeft').textContent === player &&
    document.getElementById('bottomLeft').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 第二列获胜
  if (
    document.getElementById('topCenter').textContent === player &&
    document.getElementById('middleCenter').textContent === player &&
    document.getElementById('bottomCenter').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 第三列获胜
  if (
    document.getElementById('topRight').textContent === player &&
    document.getElementById('middleRight').textContent === player &&
    document.getElementById('bottomRight').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 左上到右下对角线获胜
  if (
    document.getElementById('topLeft').textContent === player &&
    document.getElementById('middleCenter').textContent === player &&
    document.getElementById('bottomRight').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 右上到左下对角线获胜
  if (
    document.getElementById('topRight').textContent === player &&
    document.getElementById('middleCenter').textContent === player &&
    document.getElementById('bottomLeft').textContent === player
  ) {
    alert('玩家' + player + '获胜!');
    return true;
  }
  // 未满足任何获胜条件
  return false;
}

这里用textContent代替innerHTML,只会读取元素内的纯文本内容,不会误读标签、空格等内容,判断更稳定。

第二步:在落子逻辑中调用判断函数

你原来的落子逻辑中,给点击的格子赋值X/O完成后,立刻调用上面的函数即可,示例:

// 记录当前轮到哪个玩家落子,初始为X
let currentPlayer = 'X';

// 格子点击事件逻辑示例,可复用在所有格子的点击事件上
document.getElementById('topLeft').addEventListener('click', function() {
  // 先判断格子是否为空,空的才能落子
  if (this.textContent === '') {
    // 赋值当前玩家的符号
    this.textContent = currentPlayer;
    // 立刻判断当前玩家是否获胜
    const isWin = checkWin(currentPlayer);
    if (isWin) {
      // 获胜后直接结束,不再切换玩家
      return;
    }
    // 未获胜,切换玩家
    currentPlayer = currentPlayer === 'X' ? 'O' : 'X';
  }
})

如果要实现平局判断,只需要在每次切换玩家前,判断所有9个格子是否都有内容,如果都有内容且checkWin返回false,就弹出平局提示即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:39:03