【问题标题】:jQuery datatables: test if datatables plugin is initializedjQuery 数据表:测试数据表插件是否已初始化
【发布时间】:2011-06-29 23:56:52
【问题描述】:

我想检查一个带有 id="datatable" 的表元素是否是数据表初始化的。像这样的:

if ($('#datatable').dataTable().initialized) {
  alert("initialized!");
}
else {
      alert("not initialized!");
    }

我该怎么做? 谢谢!

【问题讨论】:

  • “初始化”是什么意思?
  • 可以说,我有几个 class="datatable" 的表。它们都是使用以下数据表初始化的: $('.datatable').dataTable();然后我用 not 数据表初始化的 class="datatable" 动态添加另一个表。现在我想用 class="datatable" 遍历所有表并根据条件做一些事情 - this 表元素是否已初始化数据表。

标签: jquery datatables


【解决方案1】:

你可以在jQuery数据表中使用fnIsDataTable函数

var ex = document.getElementById('example');
if ( ! $.fn.DataTable.fnIsDataTable( ex ) ) {
  $(ex).dataTable();
}

您可以在api找到更多信息

【讨论】:

  • 似乎这应该是数据表的规范方式> 1.9.1
  • 我认为这应该被标记为正确答案。
  • 应该被标记为正确答案。非常感谢
【解决方案2】:

首先,在初始化数据表时添加一个特殊的类名:

$('.datatable').not('.initialized').addClass('initialized').dataTable()

现在你可以通过类名来区分它们了:

alert( $('#datatable').hasClass('initialized') )

【讨论】:

  • 好主意。谢谢!
【解决方案3】:

我觉得跟随是正确的答案。

$(document).ready(function(){
    if (jQuery().dataTable) {
         // your code to do some detaul set ups 
    }
});

例如

$(document).ready(function(){
    if (jQuery().dataTable) {

            $.extend( $.fn.dataTable.defaults, {
                iDisplayLength : 200,
                aLengthMenu : [[100, 200, 300, -1], [100, 200, 300, "All"]],
            });
        }
});

通过这种方式,您if(jQuery().<libname>) 应该能够检查是否加载了任何库。

【讨论】:

  • 这是所有 jquery 插件的好方法。
【解决方案4】:

Datatable 有一个方法来检查一个元素是否已经被初始化为一个数据表 - $.fn.DataTable.fnIsDataTable

tableElement = document.getElementById('your table ID');
$.fn.DataTable.fnIsDataTable(tableElement); // returns true or false

【讨论】:

    【解决方案5】:

    在您调用 .dataTable() 之后,它会对表进行任何使其可识别的操作吗?即它是否添加了一个“已初始化”的新类或类似的东西?如果是这样,您可以像这样遍历项目:

    $('.datatable').each(
        function(index, element) {
            var _table = $(element);
            if (_table.hasClass('initialised')) {
                // Do stuff
            } else {
                // Do stuff
            }
        }
    );
    

    抱歉,如果这不是您的意思。您的问题不清楚“dataTable()”实际上是做什么的。

    【讨论】:

    • 嘿,谢谢你的重播。我忘了提到它关于 jquery 的“数据表”插件,是的,我问自己同样的问题 - 如何识别数据表初始化的表。我在数据表论坛上问了这个问题,并从艾伦那里得到了我想要的东西:datatables.net/forums/comments.php?DiscussionID=4180&page=1。还是谢谢。
    • frenzy引用的方法是DataTables插件作者设计的;恕我直言,这是一个非常好的解决方案。
    【解决方案6】:

    我在我的场景中使用了callback() 函数来做同样的事情。考虑将其作为替代方法分享

    /* During Initialization */
    var isTableInitialized = false;
    $('#datatable').dataTable({/* your dataTable configurations*/},initializeDT());
    
    /* Implement a callback function to set the value */
    function initializeDT() {
        isTableInitialized = true;
    }
    

    稍后在代码中..

    /* Checking for Initialization is easier*/
    if(isTableInitialized) {
        /* Do something here */
    } else {
        /* Do something here */
    }
    

    【讨论】:

      【解决方案7】:

      这对我有用。

          $(document).ready(function() {
          if (jQuery().dataTable) {
              $.extend( $.fn.dataTable.defaults, {
                  /*some default settings*/
              });
          }
      
          $('#myDataTable').DataTable();
      });
      

      【讨论】:

        猜你喜欢
        • 2015-08-01
        • 2013-09-20
        • 2011-03-13
        • 2016-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-16
        • 2015-06-11
        相关资源
        最近更新 更多