Заголовок JQuery Datatable не выровнен с телом?

У меня есть набор данных, которые должны отображаться в JQuery Datatables с параметрами для фильтрации и прокрутки без потери заголовков столбцов. Пока все функции работают, но есть проблема с заголовком столбца. Если вы щелкните ссылку и проверьте пример запуска, вы увидите проблему. Заголовок столбца находится слева, а тело - по центру. Я попытался исправить эту проблему и изменить свой HTML-код, удалив некоторые атрибуты таблицы JQuery, но все равно безуспешно. Пожалуйста, если кто-нибудь знает, как решить эту проблему, или если есть какие-либо проблемы с моим кодом, пожалуйста, сообщите мне об этом. Вот пример:

$('#btnGet').on('click', function() {
  buildTable();
});

var dataTable;

function GenerateTable(tblID) {
  // Setup - add a text input to each footer cell
  $('#rptTbl thead tr').clone(true).appendTo('#rptTbl thead');
  $('#rptTbl thead tr:eq(1) th').each(function(i) {
    //var title = $(this).text();
    $(this).html('<input type = "text" placeholder = "Search" />');

    $('input', this).on('keyup change', function() {
      if (dataTable.column(i).search() !== this.value) {
        dataTable.column(i).search(this.value).draw();
      }
    });
  });

  dataTable = $('#' + tblID).DataTable({
    dom: 'Bfrtip',
    buttons: [
      'copy', 'csv', 'excel', 'print',
      {
        extend: 'pdfHtml5',
        orientation: 'landscape',
        pageSize: 'LEGAL'
      }
    ],
    orderCellsTop: true,
    fixedHeader: {
      header: true,
      footer: true
    },
    scrollX: true,
    scrollY: "400px",
    scrollCollapse: true,
    iDisplayLength: 25,
    language: {
      "emptyTable": "No records were found."
    }
  });
}

function buildTable() {
  var htmlTbl = '<table id = "rptTbl" class = "table table-bordered"><thead><tr><th>Area</th></tr></thead><tbody><tr><td>Central</td></tr><tr><td>Eastern</td></tr><tr><td>Central</td></tr><tr><td>Central</td></tr><tr><td>Central</td></tr><tr><td>Central</td></tr><tr><td>Eastern</td></tr><tr><td>Central</td></tr><tr><td>Central</td></tr><tr><td>Central</td></tr><tr><td>Central</td></tr></tbody></table>';
  $('#rptData').empty().append(htmlTbl);
  GenerateTable('rptTbl');
}
<!DOCTYPE html>
<html>

  <head>
      <title>Test JQuery Datatables</title>
      <meta charset = "utf-8">
      <meta name = "viewport" content = "width=device-width, initial-scale=1">
      <link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
      <!-- *** Start: CSS for DataTables. *** -->
	    <link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/1.10.16/css/dataTables.jqueryui.min.css" />
      <link rel = "stylesheet" type = "text/css" href = "https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" />
      <link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/buttons/1.4.2/css/buttons.dataTables.min.css" />
      <!-- *** End: CSS for DataTables. *** -->
      <script language = "javascript" src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script language = "javascript" src = "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
      <!-- *** Start: JS for DataTables. *** -->
      <script type = "text/javascript" src = "https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js"></script>
      <script type = "text/javascript" src = "https://cdn.datatables.net/1.10.16/js/dataTables.jqueryui.min.js"></script>
      <script type = "text/javascript" src = "https://cdn.datatables.net/buttons/1.4.2/js/dataTables.buttons.min.js"></script>
      <script type = "text/javascript" src = "https://cdn.datatables.net/buttons/1.4.2/js/buttons.flash.min.js"></script>
      <script type = "text/javascript" src = "https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
      <script type = "text/javascript" src = "https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/pdfmake.min.js"></script>
      <script type = "text/javascript" src = "https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/vfs_fonts.js"></script>
      <script type = "text/javascript" src = "https://cdn.datatables.net/buttons/1.4.2/js/buttons.html5.min.js"></script>
      <script type = "text/javascript" src = "https://cdn.datatables.net/buttons/1.4.2/js/buttons.print.min.js"></script>
    <!-- *** End: JS for DataTables. *** -->
  </head>

  <body>
      <div class = "container">
        <div id = "report_filters" class = "collapse in">
          <div class = "row">
            <div class = "form-group col-xs-10 col-sm-5 col-md-3 col-lg-3">
              <button type = "button" id = "btnGet" class = "btn btn-primary btn-block" data-toggle = "collapse" data-target = "#report_data,#report_filters">Get Report</button>
            </div>
          </div>
        </div>

        <div id = "report_data" class = "collapse">
          <div class = "row">
            <div class = "form-group col-xs-12 col-sm-12 col-md-12 col-lg-12">
              <button type = "button" class = "btn btn-primary" data-toggle = "collapse" data-target = "#report_data,#report_filters">
	                            <span class = "glyphicon glyphicon-circle-arrow-left"></span> Go Back
	                        </button>
            </div>
          </div>
       <div id = "rptData" class = "table-responsive"></div>
      </div>
    </div>
  </body>

</html>

Я исследовал вашу проблему, эти опции вызывают ваши проблемы: scrollX: true, scrollY: "400px", scrollCollapse: true. Если вы прокомментируете их все, вы увидите свою таблицу по центру. Однако я не нашел хорошего решения для решения проблем, которые создает эта опция.

Shidersz 05.11.2018 19:44

@ D.Smania Я смог обнаружить то же самое, но без решения, если они включены. Что-то не так в таблицах данных css.

espresso_coffee 05.11.2018 19:46

Просто предупреждение: если вы интегрируете Datatables с Bootstrap, тогда вы должны включить всю поддержку Бутстрап, а не JQuery UI, возможно, это источник проблем. Прочтите: Интеграция с бутстрапом. То же самое и с расширением кнопок.

Shidersz 05.11.2018 23:01

@ D.Smania Можете ли вы указать, что именно не работает с библиотеками, которые я включил? Есть ли у меня ненужные или отсутствующие?

espresso_coffee 06.11.2018 12:59

Я действительно уверен, что то, что вы делаете, неправильно или нет, но для Bootstrap плагин Datatables имеет свой набор таможенных стилей CSS вместо, например: <link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/1.10.16/css/dataTables.jque‌​ryui.min.css" />, который является одним из стилей JQuery UI. Поскольку вы используете Bootstrap, я думаю, что это более логично для использования: <link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/1.10.16/css/dataTables.boot‌​strap.min.css" />, не более того. То же самое применимо к замене других источников, связанных с JQueryUI.

Shidersz 06.11.2018 16:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
5
3 103
1

Ответы 1

Добавить функцию drawCallback в опциях dataTable

 dataTable = $('#' + tblID).DataTable({
    dom: 'Bfrtip',
    buttons: [
      'copy', 'csv', 'excel', 'print',
      {
        extend: 'pdfHtml5',
        orientation: 'landscape',
        pageSize: 'LEGAL'
      }
    ],
    orderCellsTop: true,
    fixedHeader: {
      header: true,
      footer: true
    },
    scrollX: true,
    scrollY: "400px",
    scrollCollapse: true,
    iDisplayLength: 25,
    drawCallback: function( settings ) {
      // Reset margin to 0 after datatable render
      var ele = document.querySelector('.dataTables_scrollBody'); 
      if (ele){
         ele = ele.querySelector('.dataTable');
         if (ele){
            ele.style.margin = 0; 
         }
     }
   },
    language: {
      "emptyTable": "No records were found."
    }
  });

Это устранило проблему. Я замечаю, что таблица выровнена по левому краю. В моем примере тело было по центру, а голова - слева. Есть ли способ центрировать стол? Также не могли бы вы уточнить, почему возникла эта проблема и что именно сделала маржа для ее устранения?

espresso_coffee 05.11.2018 19:07

Не знаю, но почему-то jquery ui css испортил css по умолчанию для данных.

front_end_dev 05.11.2018 19:19

Справедливо. Спасибо.

espresso_coffee 05.11.2018 19:40

Другие вопросы по теме