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

Highcharts使用export-data模块查看数据表格时触发报错求助

问题描述
  • 使用Highcharts结合export-data模块实现图表下方数据表格的显示/隐藏功能
  • 已按顺序引入必需脚本:
    <script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
    <script src="https://code.highcharts.com/highcharts.js"></script>
    <script src="https://code.highcharts.com/modules/boost.js"></script>
    <script src="https://code.highcharts.com/modules/series-label.js"></script>
    <script src="https://code.highcharts.com/modules/exporting.js"></script>
    <script src="https://code.highcharts.com/modules/export-data.js"></script>
    <script src="https://code.highcharts.com/modules/accessibility.js"></script>
    
  • 图表加载正常,但点击「查看数据表格」时,表格显示后控制台报错:
    export-data.src.js:488 Uncaught TypeError: b.closest is not a function
        at export-data.src.js:488:33
        at NodeList.forEach (<anonymous>)
        at f.<anonymous> (export-data.src.js:487:17)
        at highcharts.src.js:1654:25
        at Array.forEach (<anonymous>)
        at x (highcharts.src.js:1651:17)
        at f.d.toggleDataTable (export-data.src.js:1208:21)
        at f.onclick (export-data.src.js:1252:25)
        at HTMLLIElement.onclick (exporting.src.js:2065:45)
    
  • 报错后无法隐藏数据表格或通过JS函数更新表格
问题原因

核心错误是export-data模块第488行代码中,变量b的类型与调用的closest方法不匹配:要么是将原生DOM节点当成jQuery对象调用jQuery的.closest(),要么是在不支持原生Element.closest()的环境中调用了该方法,本质是版本兼容性或DOM元素处理逻辑的bug。

解决方案

方法1:升级Highcharts到最新稳定版

Highcharts官方大概率已修复该DOM处理bug,直接替换所有Highcharts相关脚本为最新稳定版链接即可(版本号可参考Highcharts官网):

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/boost.js"></script>
<script src="https://code.highcharts.com/modules/series-label.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<script src="https://code.highcharts.com/modules/export-data.js"></script>
<script src="https://code.highcharts.com/modules/accessibility.js"></script>

方法2:手动修复模块代码

若无法升级版本,直接修改export-data.src.js第488行:

  • 若b是原生DOM节点,将b.closest改为$(b).closest(用jQuery包装后调用对应方法)
  • 若b是jQuery对象,确认环境支持原生方法或调整为jQuery的.closest()调用

方法3:添加原生closest方法的Polyfill

针对IE11等不支持原生Element.closest()的浏览器,在引入Highcharts脚本前添加Polyfill:

if (!Element.prototype.closest) {
  Element.prototype.closest = function(s) {
    var el = this;
    do {
      if (el.matches(s)) return el;
      el = el.parentElement || el.parentNode;
    } while (el !== null && el.nodeType === 1);
    return null;
  };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 06:33:28