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

使用Gridstack添加Widget时调用事件报错:e.getAttribute不是函数

GridStack 添加Widget时出现TypeError的解决办法

错误原因

错误Uncaught TypeError: e.getAttribute is not a function的核心问题是:你调用grid.addWidget()时传入的是jQuery对象,而GridStack的addWidget方法要求传入原生DOM元素。jQuery对象是对DOM元素的封装,本身没有getAttribute方法,因此触发了这个报错。

解决办法

将jQuery对象转换为原生DOM元素即可,常用两种方式:

  • 在jQuery对象后添加[0],直接获取封装的第一个原生DOM节点
  • 使用jQuery的.get(0)方法提取原生DOM元素

修改后的关键代码

调整addWidget函数如下:

function addWidget(content) {
  var gridStackItem = $('<div>').html(content);
  // 转换为原生DOM元素后传入
  grid.addWidget(gridStackItem[0]);
}

完整修改后的代码

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="node_modules/gridstack/dist/gridstack.min.css" />
</head>
<body>
  <div class="grid-stack">
    <!-- Your widgets will be added here -->
  </div>

  <button id="add-widget-btn">Add Widget</button>

  <!-- Pop-up container -->
  <div id="popup-container" style="display: none;">
    <h3>Select a Widget:</h3>
    <button class="widget-selector" data-widget-type="chart">Chart</button>
    <button class="widget-selector" data-widget-type="table">Table</button>
    <button class="widget-selector" data-widget-type="image">Image</button>
  </div>

  <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js"></script>
  <script src="node_modules/gridstack/dist/gridstack-all.js"></script>
  <script>
    $(function () {
      var grid = GridStack.init();

      $('#add-widget-btn').click(function () {
        $('#popup-container').show();
      });

      $('.widget-selector').click(function () {
        var widgetType = $(this).data('widget-type');
        var widgetContent = getWidgetContent(widgetType);
        addWidget(widgetContent);
        $('#popup-container').hide();
      });

      function getWidgetContent(widgetType) {
       
        if (widgetType === 'chart') {
          return '<div class="grid-stack-item" data-gs-width="4" data-gs-height="4">Chart Widget Content</div>';
        } else if (widgetType === 'table') {
          return '<div class="grid-stack-item" data-gs-width="6" data-gs-height="4">Table Widget Content</div>';
        } else if (widgetType === 'image') {
          return '<div class="grid-stack-item" data-gs-width="2" data-gs-height="4">Image Widget Content</div>';
        }
      }

      function addWidget(content) {
        var gridStackItem = $('<div>').html(content);
        // 转换为原生DOM元素
        grid.addWidget(gridStackItem[0]);
      }
    });
  </script>
</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 17:30:37