【问题标题】:Datatables: Uncaught TypeError: Cannot read property 'parentNode' of undefined数据表:未捕获的类型错误:无法读取未定义的属性“parentNode”
【发布时间】:2013-05-29 23:24:26
【问题描述】:

查看网页时,我的控制台出现两个错误。正在使用数据表,我很确定(如错误所示)该问题与数据表有关。这里的问题是我没有编写这段代码,我现在只是在尝试修复代码中的问题。奇怪的是,这部分代码以前应该可以工作,因为我可以明显看到它在实时版本上工作。我认为错误是正确的吗?如果是这样,当代码不是我制作的并且代码和数据量很大时,调试这个的最佳方法是什么?

DataTables 警告:意外数量的 TD 元素。预计 2040 年 并得到了 1981。DataTables 中不支持 rowspan / colspan 表体,每行/列必须有一个单元格 组合。 jquery.dataTables.js:5840

未捕获的类型错误:无法读取未定义的属性“parentNode”。 jquery.dataTables.js:2843

【问题讨论】:

  • 好的,您不需要发布带有数据代码的实际站点,但您需要发布您的 datatables() 功能代码和静态表 html ,两者都不应包含敏感信息,以及问题可以通过查看这些内容来诊断,表格可能会根据您的约束而出现,但 datatables() 应该很容易在源中找到
  • @JayRizzi 问题是表中的数据几乎都是敏感数据。在理查德的回答中,我提供了一些使用的示例 HTML 和 Javascript。这只是其中的一部分,因为有很多数据需要审查。

标签: php javascript jquery console datatables


【解决方案1】:

您有可以发布的网址以便我们查看吗?

Cannot read propertyparentNodeof undefined 是一个 javascript 错误,因为您试图获取不存在的东西的 parentNode

另一个错误似乎很明显? TR 中 TD 元素的数量与表格的其余部分不一致。查看 HTML 并检查 THEAD、TFOOT 和 TBODY 中的 TD 和 TH 元素的数量是否都相同。 "DataTables 不支持表体中的rowspan / colspan"

请张贴表格的 URL 或 HTML/JS sn-p,最好在http://www.jsfiddle.net

【讨论】:

  • 我无法提供实际站点的 URL,因为它是一个私有网站,并且很难通过 jsfiddle 向您展示任何内容,因为它也使用 PHP。
  • 您的输出是 HTML .. 将其复制到 jsfiddle。这里的 PHP 代码并不重要。只需将表格的 HTML 复制到 JS fiddle 和用于构建表格的 javascript 代码中。
  • 但是,该表包含敏感数据。只尝试在 jsfiddle 工作中提供部分内容,还是您需要全部内容?
  • 不能把敏感数据拿出来吗?使表格只有 10 行长,或 5 行。不必很大。只需要看结构。以及初始化表格的 javascript
  • 这里是 html 的 jsfiddle。我仍然需要做一些探索才能准确找到使用了 Javascript 的哪一部分:jsfiddle.net/SSR2u
【解决方案2】:

与此特定案例无关,但可能对其他搜索此问题的人有用。

我遇到了同样的错误,结果是指定了一个不存在的排序列。我指定了第 11 列,但表格只有 10 列。

【讨论】:

    【解决方案3】:

    我遇到了同样的错误,但不同的解决方案解决了它。
    我在初始化数据表时已经设置了属性destroy : true。这有助于重新初始化表。
    问题:
    在数据表中,您必须在初始化时提供属性'columns': columnArray,。 它看起来像:

    $('#example').dataTable( {
      "ajaxSource": "sources/objects.txt",
      "columns": [
        { "data": "engine" },
        { "data": "browser" },
        { "data": "platform" },
        { "data": "version" },
        { "data": "grade" }
      ],
      destroy: true
    } );
    

    这个columnArray 必须根据 ajax 数据填充。我为每个 ajax 调用填充了这个,因此用相同列的多个条目来膨胀数组。我通过将数组重新初始化为 [] 来修复它。

    【讨论】:

    • 我在调用$(myTable).DataTable().destroy(true) 时也遇到了这个错误。我不明白你的解决方案。你要重新初始化什么数组?
    • 很久没有发这个了。这与重新初始化我的数据表有关。 destroy 帮助您做到这一点。
    • 对于下一个人,我通过不调用.destroy() 解决了这个问题,而是像上面发布的@Aditya Gupta 一样在初始化中添加了destroy: true 标志。这似乎奏效了。我的列是动态的,我不需要像您在此处那样初始化它们。
    【解决方案4】:

    销毁表而不检查它是否是数据表对我来说是个问题,所以通过添加以下检查解决了这个问题

    var table = $('#tableName')
        if (!$.fn.DataTable.isDataTable('#tableName')) {
           return;
        }
        else {
            var table = $('#tableName').DataTable();
            table.destroy();
        }
    

    【讨论】:

      【解决方案5】:

      我遇到了这个问题,我通过在任何刷新或重新填充之前清空表格来解决它:

      $('#table').empty();
      
      $('#table').dataTable(...);
      

      【讨论】:

        【解决方案6】:

        我遇到了这个问题,我通过添加 sDom 解决了它:

        sDom: '<"top"><"clear">rt<"bottom"><"clear">'   
        

        之前:

        sDom: ''    
        

        【讨论】:

          猜你喜欢
          • 2014-07-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多