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

PHP学校成绩系统实现点击平均分后显示隐藏的成绩明细表

实现方案

你需要的点击切换显隐是前端交互功能,不需要额外后端请求,用少量原生JavaScript即可实现,无需引入额外框架,具体操作如下:

1. 新增通用样式控制明细表默认隐藏

先在页面头部加入以下CSS代码,统一控制所有成绩明细表默认不显示:

/* 所有成绩明细表默认隐藏,预留顶部边距 */
.grade_table {
  display: none;
  margin-top: 20px;
}

2. 调整明细表结构

给你的成绩明细表新增通用类grade_table,匹配你现有的命名规则:

<div class="Note">
  <div style="width: 80%; min-width: 550px">
    <!-- 新增通用类grade_table -->
    <table class="grade_table grade_Fruehauf">
      <tr>
        <th>Fruehauf</th>
      </tr>
      <tr>
        <th>Deutsch</th>
        <th>3.5</th>
      </tr>
      <tr>
        <th>Math</th>
        <th>3.5</th>
      </tr>
      <tr>
        <th>Biologie</th>
        <th>3.5</th>
      </tr>
      <tr>
        <th>Französisch</th>
        <th>4</th>
      </tr>
      <tr>
        <th>Durchschnitt</th>
        <th style="border-top:solid;">3.6</th>
      </tr>
    </table>
  </div>
</div>

3. 调整主表平均分链接规则

给所有可点击的平均分链接新增统一类avg_link,同时用自定义属性标记对应学生的姓氏,方便JS匹配对应明细表,你现有第一个学生的链接可以修改为:

// 数组最后一项按该规则调整,后续其他学生的平均分链接也按该格式生成
'<a href="javascript:;" class="avg_link Fruehauf" data-stu-surname="Fruehauf"><u>3.6</u></a>'

4. 新增JS实现切换逻辑

在页面底部加入以下原生JS代码,即可实现点击平均分显示对应明细表,点击其他平均分自动隐藏上一个明细表,再次点击当前平均分也可隐藏明细表:

document.addEventListener('DOMContentLoaded', function() {
  // 获取所有平均分点击链接
  const avgLinks = document.querySelectorAll('.avg_link');
  avgLinks.forEach(link => {
    link.addEventListener('click', function(e) {
      e.preventDefault();
      // 获取当前点击的学生姓氏
      const stuSurname = this.dataset.stuSurname;
      // 匹配对应的成绩明细表
      const targetTable = document.querySelector('.grade_' + stuSurname);
      if (!targetTable) return;
      
      // 隐藏所有非当前的明细表
      document.querySelectorAll('.grade_table').forEach(table => {
        if (table !== targetTable) table.style.display = 'none';
      });
      
      // 切换当前明细表的显隐状态
      targetTable.style.display = targetTable.style.display === 'table' ? 'none' : 'table';
    })
  })
})

可选扩展:批量生成所有学生明细表

如果学生成绩都存储在PHP数组中,可直接循环生成所有学生的明细表,无需逐个手写,示例代码如下:

<?php
// 示例成绩数组,可根据你的实际数据结构调整
$stuGrades = [
  'Fruehauf' => [
    'Deutsch' => 3.5,
    'Math' => 3.5,
    'Biologie' => 3.5,
    'Französisch' => 4,
    'avg' => 3.6
  ],
  // 后续其他学生的成绩依次填入即可
];
foreach ($stuGrades as $surname => $grades) {
?>
<div class="Note">
  <div style="width: 80%; min-width: 550px">
    <table class="grade_table grade_<?php echo $surname; ?>">
      <tr>
        <th><?php echo $surname; ?></th>
      </tr>
      <?php foreach ($grades as $subject => $score) {
        if ($subject == 'avg') continue;
      ?>
      <tr>
        <th><?php echo $subject; ?></th>
        <th><?php echo $score; ?></th>
      </tr>
      <?php } ?>
      <tr>
        <th>Durchschnitt</th>
        <th style="border-top:solid;"><?php echo $grades['avg']; ?></th>
      </tr>
    </table>
  </div>
</div>
<?php } ?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:45:03