数据库 Jquery - 使用 ScrollY 时列标题未对齐

Posted

技术标签:

【中文标题】数据库 Jquery - 使用 ScrollY 时列标题未对齐【英文标题】:Database Jquery - Column Headers Misalign when using ScrollY 【发布时间】:2017-12-07 00:40:48 【问题描述】:

我正在使用 jQuery 的 DataTables 和 Bootstrap。所以我遇到的问题是,当我在“已完成”和“死”选项卡之间切换时,“死”选项卡的列标题会在左侧聚集在一起,直到我单击它们然后它们正确对齐。每当我刷新时都会发生这种情况。我尝试将 CSS 与 overflow:auto 一起使用,但这会使我的整个面板可滚动,这是我不想要的。我希望在滚动表格时标题保持固定。

  <div class = 'row'>
  <div class='col-lg-11'>

  <div id="pane3" > 
  <ul class="nav nav-tabs">
    <li class="active">
      <a  href="#4a" data-toggle="tab">My Completed</a>
    </li>
    <li>
      <a  href="#4b" id="deadTab"  data-toggle="tab">Dead Requests</a>
    </li>

  </ul>
  <div class="tab-content">
      <div class='tab-pane active' id ="4a">
        <!-- <div id="" style=" width: 100%; position:relative; height:200px;"> -->
          <table id='completed' class="table table-striped table-hover">
          <thead>
            <tr>
              <th>Req. #</th>
              <th>Project #</th>
              <th>Client Name</th>
              <th>Program</th>
              <th>Request Type</th>
              <th>Assignee</th>
              <th>Completed Date</th>
              <th>Clone</th>

            </tr>
          </thead>
          <tbody>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
          </tbody>
        </table>
      <!--   </div> -->
        </div>
          <div class='tab-pane' id ="4b">
         <!--  <div id="" style=" overflow:auto; position:relative; "> -->
            <table id='dead' class="table table-striped table-hover">
            <thead>
              <tr>
                <th>Req. #</th>
                <th>Project #</th>
                <th>Client Name</th>
                <th>Program</th>
                <th>Request Type</th>
                <th>Assignee</th>
                <th>Dead Date</th>
                <th>Restart</th>
              </tr>
            </thead>
            <tbody>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
            <tr>
              <td>July</td>
              <td>Dooley</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>john@e</td>
              <td>july@example.com</td>
              <td>6/12/2017</td>
              <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
            </tr>
          </tbody>
          </table>
         <!--  </div> -->
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

<script>

$(document).ready(function() 



   $('#completed').DataTable( 
    "paging":false,
    // "fixedHeader": true,
    "scrollY": "140px",
    "table-layout":"fixed",
    "columnDefs":[
    "width":60, "targets":0,
    "width":60, "targets":1,
    "width":60, "targets":2,
    "width":60, "targets":3,
    "width":90, "targets":4,
    "width":90, "targets":5,
    "width":90, "targets":6,
    "width":90, "targets":7,
    ]

  );


  $('#dead').DataTable( 
    "paging":false,
    "fixedHeader": true,
    "scrollY": "140px",
    "table-layout":"fixed",
     "columnDefs":[
    "width":60, "targets":0,
    "width":60, "targets":1,
    "width":60, "targets":2,
    "width":60, "targets":3,
    "width":90, "targets":4,
    "width":90, "targets":5,
    "width":90, "targets":6,
    "width":90, "targets":7,
    ]

    // "table-layout":"fixed"



  );





);



</script>

【问题讨论】:

【参考方案1】:

问题是您的另一个选项卡已隐藏 (display: none)。您可以在dead 选项卡显示如下后初始化您的数据表:

$('#completed').DataTable(
  "paging": false,
  // "fixedHeader": true,
  "scrollY": "140px",
  "table-layout": "fixed",
  "columnDefs": [
      "width": 60,
      "targets": 0
    ,
    
      "width": 60,
      "targets": 1
    ,
    
      "width": 60,
      "targets": 2
    ,
    
      "width": 60,
      "targets": 3
    ,
    
      "width": 90,
      "targets": 4
    ,
    
      "width": 90,
      "targets": 5
    ,
    
      "width": 90,
      "targets": 6
    ,
    
      "width": 90,
      "targets": 7
    ,
  ]

);






$('#deadTab').one('shown.bs.tab', function(e) 
  $('#dead').DataTable(
    "paging": false,
    "fixedHeader": true,
    "scrollY": "140px",
    "table-layout": "fixed",
    "columnDefs": [
        "width": 60,
        "targets": 0
      ,
      
        "width": 60,
        "targets": 1
      ,
      
        "width": 60,
        "targets": 2
      ,
      
        "width": 60,
        "targets": 3
      ,
      
        "width": 90,
        "targets": 4
      ,
      
        "width": 90,
        "targets": 5
      ,
      
        "width": 90,
        "targets": 6
      ,
      
        "width": 90,
        "targets": 7
      ,
    ]

    // "table-layout":"fixed"

  );
)
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="//cdn.datatables.net/1.10.15/css/jquery.dataTables.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="//cdn.datatables.net/1.10.15/js/jquery.dataTables.min.js"></script>

<div class="container">
  <div class='row'>
    <div class='col-lg-11'>
      <div id="pane3">
        <ul class="nav nav-tabs">
          <li class="active">
            <a href="#4a" data-toggle="tab">My Completed</a>
          </li>
          <li>
            <a href="#4b" id="deadTab" data-toggle="tab">Dead Requests</a>
          </li>

        </ul>
        <div class="tab-content">
          <div class='tab-pane active' id="4a">
            <!-- <div id="" style=" width: 100%; position:relative; height:200px;"> -->
            <table id='completed' class="table table-striped table-hover">
              <thead>
                <tr>
                  <th>Req. #</th>
                  <th>Project #</th>
                  <th>Client Name</th>
                  <th>Program</th>
                  <th>Request Type</th>
                  <th>Assignee</th>
                  <th>Completed Date</th>
                  <th>Clone</th>

                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
              </tbody>
            </table>
            <!--   </div> -->
          </div>
          <div class='tab-pane' id="4b">
            <!--  <div id="" style=" overflow:auto; position:relative; "> -->
            <table id='dead' class="table table-striped table-hover">
              <thead>
                <tr>
                  <th>Req. #</th>
                  <th>Project #</th>
                  <th>Client Name</th>
                  <th>Program</th>
                  <th>Request Type</th>
                  <th>Assignee</th>
                  <th>Dead Date</th>
                  <th>Restart</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
                <tr>
                  <td>July</td>
                  <td>Dooley</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>john@e</td>
                  <td>july@example.com</td>
                  <td>6/12/2017</td>
                  <td><button type="button" class="btn btn-primary btn-xs">View Form</button></td>
                </tr>
              </tbody>
            </table>
            <!--  </div> -->
          </div>
        </div>
      </div>
    </div>
  </div>
</div>

【讨论】:

以上是关于数据库 Jquery - 使用 ScrollY 时列标题未对齐的主要内容,如果未能解决你的问题,请参考以下文章

使用 ScrollX、ScrollY 时数据表列未对齐

使用 ScrollY 时数据表标题的对齐问题

使用 Google Chrome 启用 scrollX 或 scrollY 时,数据表中出现重复的空标题

使用“scrollY”时无法让 DataTables 标题行对齐

Jquery DataTable列顺序未与固定标题对齐[重复]

Jquery数据表标题与正文不对齐