Ошибки разбивки таблиц на страницы

#javascript #html #jquery #css #ejs

#javascript #HTML #jquery #css #ejs

Вопрос:

Недавно я попытался обновить свой код разбивки на страницы, чтобы я мог использовать его для нескольких таблиц на разных страницах. Но когда я добавил функцию, основанную на уникальном идентификаторе таблицы, первые 2 кнопки работают вместе, а последние 2 работают просто отлично. Кроме того, кнопки разбивки на страницы находятся внутри одного и того же div, и я просто не могу понять, почему.

Это функция

    function setPage(pagination, pageBody){
    $(pagination).after('<div id="nav"> </div>');
    var rowsShown = 4;
    var rowsTotal = $(pageBody).length;
    var numPages = rowsTotal/rowsShown;
    for(i = 0;i < numPages;i  ) {
        var pageNum = i   1;
        $('#nav').append('<button type="button" rel="' i '" class="navpage">' pageNum '</button> ');
    }
    $(pageBody).hide();
    $(pageBody).slice(0, rowsShown).show();
    $('#nav button:first').addClass('active');
    $('#nav button').bind('click', function(){

        $('#nav button').removeClass('active');
        $(this).addClass('active');
        var currPage = $(this).attr('rel');
        var startItem = currPage * rowsShown;
        var endItem = startItem   rowsShown;
        $(pageBody).css('opacity','0.0').hide().slice(startItem, endItem).
        css('display','table-row').animate({opacity:1}, 300);
    });
}


setPage('#pagination', '#pagination tbody tr')
setPage('#pagination2', '#pagination2 tbody tr')
 

Это код css

     .navpage {
  font-size: 20px;
  font-weight: bold;
  margin-right: 10px;
  padding: 0 10px 0 10px;
  background-color: #3cd45d;
  width: 40px;
  border-radius: 10px;
  color: white;
  display: inline-block;
  text-align: center;
}

.navpage:hover {
  background-color: rgba(0, 0, 0, 0.1);
  transition: 0.3s;
}
 

И это код EJS

 <div class="grid-container">
  <div>
    <h1>Performance</h1>

    <div class="dropdown">
      <button type="button" class="button button1" id="addperformance" data-toggle="modal"
        data-target="#exampleModal">Add</button>
      <button type="button" class="button button1" id="editperformance" data-toggle="modal"
        data-target="#exampleModal1">Edit</button>
      <form action="" class="search-form">
        <input type="search" id="search_p" class="search-input" />
        <i class="fa fa-search"></i>
      </form>
    </div>
    <br />

    <table class="table table-sortable" id="pagination">
      <thead>
        <tr>
          <th>Name</th>
          <th>Category</th>
          <th>Description</th>
          <th>Date</th>
          <th>Written By</th>
        </tr>
      </thead>
      <tbody id="table_body_p">
        <% for(var i=0; i < data.employeeProfile.length; i  ) { %>
          <tr>
            <td>
              <%= data.employeeProfile[i].name %>
            </td>
            <td>
              <%= data.employeeProfile[i].category %>
            </td>
            <td>
              <%= data.employeeProfile[i].description %>
            </td>
            <td>
              <%= data.employeeProfile[i].date %>
            </td>
            <td>
              <%= data.employeeProfile[i].writtenBy %>
            </td>

          </tr>
          <% } %>
      </tbody>
    </table>
  </div>
</div>
<div class="grid-container">
  <div>
    <h1>Personal Information</h1>

    <div class="dropdown">
      <button type="button" class="button button1" id="addinfo" data-toggle="modal"
        data-target="#exampleModal2">Add</button>
      <button type="button" class="button button1" id="editinfo" data-toggle="modal"
        data-target="#exampleModal3">Edit</button>
      <form action="" class="search-form">
        <input type="search" id="search_pi" class="search-input" />
        <i class="fa fa-search"></i>
      </form>
    </div>
    <br />

    <table class="table table-sortable" id="pagination2">
      <thead>
        <tr>
          <th>Name</th>
          <th>Phone</th>
          <th>Email</th>
          <th>Emergency Contact</th>
          <th>Joined Date</th>
        </tr>
      </thead>
      <tbody id="table_body_pi">
        <% for(var i=0; i < data.employeeResponse.length; i  ) { %>
          <tr>
            <td>
              <%= data.employeeResponse[i].name %>
            </td>
            <td>
              <%= data.employeeResponse[i].contact %>
            </td>
            <td>
              <%= data.employeeResponse[i].email %>
            </td>
            <td>
              <%= data.employeeResponse[i].emergencyContact %>
            </td>
            <td>
              <%= data.employeeResponse[i].joinedDate %>
            </td>

          </tr>
          <% } %>
      </tbody>
    </table>
  </div>
</div>

<%- include('partials/addNewPerformance') %>
  <%- include('partials/editNewPerformance') %>
    <%- include('partials/addNewInfo') %>
      <%- include('partials/editInfo') %>


        </div>
 

Ответ №1:

«кнопки разбивки на страницы находятся внутри одного и того же div, и я просто не могу понять, почему».

Это происходит потому, что ваш код помещает их туда в цикле. Это происходит потому , что вы повторно id используете атрибут nav . Таким образом, при втором запуске цикла он помещает их внутрь первого div.

Измените значение id атрибута для каждого вызова на setPage()

ОБНОВЛЕНИЕ: ОП спросил, как создать уникальные идентификаторы:

Существует много способов создания уникальных атрибутов идентификатора. Но, следуя шаблону, который вы уже создали, почему бы не использовать ваш текущий метод атрибута id таблицы? А именно, передайте третий параметр, который является идентификатором кнопки div. Вот так:

 setPage('#pagination', '#pagination tbody tr', '#nav')
setPage('#pagination2', '#pagination2 tbody tr', '#nav2')
 

Затем внутри setPage() сделайте это:

 function setPage(pagination, pageBody, buttonDiv){
    $(pagination).after('<div id="'  buttonDiv  '"> </div>');
      // other code here ...

      // in the for loop
        $(buttonDiv).append('<button type="button" rel="' i '" class="navpage">' pageNum '</button> ');

     // rest of code ...
 

Ответ №2:

Я хотел бы спросить, является ли это правильной реализацией кода для

 '#nav button:first'
 

Для

  $(buttonDiv    'button:first').addClass('active');
    $(buttonDiv   'button').bind('click', function(){

        $(buttonDiv   'button').removeClass('active');
        $(this).addClass('active');
 

Если это правильно, кнопки разбивки на страницы не отображаются после кода.

Комментарии:

1. Нет, это неправильно $(buttonDiv 'button:first') , если #navbutton:first вместо #nav button:first — добавить пробел.