数据表页面加载问题

时间:2016-02-15 16:22:14

标签: javascript jquery html css datatable

我正在使用datatables v1.10.11和Jquery v 2.2.0

数据表的一个功能允许使用以下columns.visible API选项“隐藏”列。

<script type = "text/javascript">
  $(document).ready(function() {
    //Hide the first column with columnDefs:
    $('#example').dataTable({
      "columnDefs": [{
        "visible": false,
        "targets": 0
      }]
    });
  }); 
  </script>

同样这确实有效,但是在页面加载时我可以看到隐藏的列一瞬间(非常简短)。

使用Google Chrome(版本48.0.2564.103 m)时似乎就是这种情况。 IE(11)和FFox(41.0.1)都很好,表格按预期加载,没有“滞后”。

为什么会这样?我认为它可能与我的JS或CSS的排序有关,数据表所需的唯一依赖是Jquery,我首先放置它。

请参阅下面的JS和CSS的顺序;

<!DOCTYPE html>
<html lang="en">

    <head>

        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="description" content="">
        <meta name="author" content="">

        <title>My Title</title>

        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/css/bootstrap-datetimepicker.min.css">
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.10/css/dataTables.bootstrap.min.css">
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/buttons/1.1.0/css/buttons.bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/responsive/2.0.0/css/responsive.bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/select/1.1.0/css/select.bootstrap.min.css"/>
        <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.5.0/css/font-awesome.css"/>
        <link rel="stylesheet" type="text/css" href="http://cdn.jsdelivr.net/bootstrap.daterangepicker/2/daterangepicker.css"/>
        <!-- Custom CSS -->
        <link rel="stylesheet" type="text/css" href="css/custom.css"/>

        <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
        <script src="//cdn.datatables.net/1.10.11/js/jquery.dataTables.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
        <script src="http://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script>
        <script src="https://cdn.rawgit.com/bpampuch/pdfmake/0.1.18/build/pdfmake.min.js"></script>
        <script src="https://cdn.rawgit.com/bpampuch/pdfmake/0.1.18/build/vfs_fonts.js"></script>
        <script src="https://cdn.datatables.net/1.10.10/js/dataTables.bootstrap.min.js"></script>
        <script src="https://cdn.datatables.net/buttons/1.1.0/js/dataTables.buttons.min.js"></script>
        <script src="https://cdn.datatables.net/buttons/1.1.0/js/buttons.bootstrap.min.js"></script>
        <script src="https://cdn.datatables.net/buttons/1.1.0/js/buttons.html5.min.js"></script>
        <script src="https://cdn.datatables.net/buttons/1.1.0/js/buttons.print.min.js"></script>
        <script src="https://cdn.datatables.net/responsive/2.0.0/js/dataTables.responsive.min.js"></script>
        <script src="https://cdn.datatables.net/responsive/2.0.0/js/responsive.bootstrap.min.js"></script>
        <script src="https://cdn.datatables.net/select/1.1.0/js/dataTables.select.min.js"></script>
        <script src="https://jquery-datatables-column-filter.googlecode.com/svn/trunk/media/js/jquery.dataTables.columnFilter.js"></script>
        <script src="http://cdn.jsdelivr.net/bootstrap.daterangepicker/2/daterangepicker.js"></script>

        <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
        <!--[if lt IE 9]>
            <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
            <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
    </head>

我不确定如何解决这个问题。我已经尝试重新排序并删除某些JS和CSS文件,但它似乎没有任何区别。 Chrome存在某种预加载问题吗?

感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

它正在发生,因为如果您在$(文档).ready({})中加载了dataTables,则会在文档加载后运行;块。因此,在javascript添加必要的CSS来隐藏它们之前,基本上不会隐藏列。如果您不希望隐藏它们的延迟,您可以将自己的自定义CSS应用于这些单元格。

只需向他们添加一个类并将display:none应用于该类。

或者您可以将表设置为display:none,然后在使用initComplete事件初始化dataTables时显示它。这样,当它显示时,该列将被隐藏。

<script type = "text/javascript">
    $(document).ready(function() {
        //Hide the first column with columnDefs:
        $('#example').dataTable({
            "columnDefs": [{
                "visible": false,
                "targets": 0
            }],
            "initComplete": function() {
                $(this).show();
            }
        });
    }); 
</script>

<强>更新

在这里提供了一个完整的jsFiddle,工作示例......

https://jsfiddle.net/rsmcyz4q/

下面的完整示例......

<强> HTML

<table id="example">
<thead>
  <tr>
    <th>COLUMN 1</th>
    <th>COLUMN 2</th>
    <th>COLUMN 3</th>
  </tr>
</thead>
<tbody>
  <tr>
    <td>ROW 1</td>
    <td>ROW 1</td>
    <td>ROW 1</td>
  </tr>
  <tr>
    <td>ROW 2</td>
    <td>ROW 2</td>
    <td>ROW 2</td>
  </tr>
  <tr>
    <td>ROW 3</td>
    <td>ROW 3</td>
    <td>ROW 3</td>
  </tr>  
</tbody>
</table>

<强> CSS

#example { display: none; }

<强> JAVASCRIPT

 $(document).ready(function() {
    //Hide the first column with columnDefs:
    $('#example').dataTable({
      "columnDefs": [{
        "visible": false,
        "targets": 0
      }],
      "initComplete": function() {
        $(this).show();
      }
    });
  });