web-dev-qa-db-ja.com

データテーブルにページが1つしかない場合はページネーションを無効にします

私はdatatbalesを実装していますが、私の要件に従って、ページネーションの問題を除いてほとんどのことは解決されました。私の場合、ページネーションナビゲーションが表示されるたびに。ページが1つしかない場合、ページネーションナビゲーションを無効にしたいのですが、どうすればよいですか?私のコードは次のようなものです:

[〜#〜] js [〜#〜]

<script>
  function fnFilterColumn(i) {

    $('#example').dataTable().fnFilter(
      $("#col" + (i + 1) + "_filter").val(),
      i
    );
  }
  $(document).ready(function() {


    $('#example').dataTable({
      "bProcessing": true,
      "sAjaxSource": "datatable-interestdb.php",
      "bJQueryUI": true,
      "sPaginationType": "full_numbers",
      "sDom": 'T<"clear">lfrtip',
      "oTableTools": {
        "aButtons": [

          {
            "sExtends": "csv",
            "sButtonText": "Save to CSV"
          }
        ]
      },
      "oLanguage": {
        "sSearch": "Search all columns:"
      }


    });


    $("#example").dataTable().columnFilter({
      aoColumns: [
        null,
        null,
        null,
        null
      ]
    });


    $("#col1_filter").keyup(function() {
      fnFilterColumn(0);
    });

  });
</script>

[〜#〜] html [〜#〜]

<table cellpadding="3" cellspacing="0" border="0" class="display userTable" aria-describedby="example_info">

  <tbody>
    <tr id="filter_col1">
      <td>Interest:</td>
      <td>
        <input type="text" name="col1_filter" id="col1_filter">
      </td>
    </tr>
  </tbody>
</table>


<table width="100%" border="0" align="center" cellpadding="2" cellspacing="1" class="form_table display" id="example">

  <thead>
    <tr>
      <th class="sorting_asc" width="25%">Interest</th>
      <th width="25%">Name</th>
      <th width="25%">Email</th>
      <th width="25%">Contact No</th>
    </tr>
  </thead>
  <tbody>

    <tr>
      <td colspan="4" class="dataTables_empty">Loading data from server</td>
    </tr>
  </tbody>
  <tfoot>
    <tr>
      <th></th>
      <th></th>
      <th></th>
      <th></th>
    </tr>
  </tfoot>


</table>
54
Bappa

動的に非表示にする必要があります。fnDrawCallback()を使用できます

$('#example').dataTable({
    "fnDrawCallback": function(oSettings) {
        if ($('#example tr').length < 11) {
            $('.dataTables_paginate').hide();
        }
    }
});​

編集-別の方法が見つかりました here

"fnDrawCallback":function(){
      if ( $('#example_paginate span span.paginate_button').size()) {
      $('#example_paginate')[0].style.display = "block";
     } else {
     $('#example_paginate')[0].style.display = "none";
   }
}
38

Nicolaの答えを基に、fnDrawCallback()コールバックとoSettingsオブジェクトを使用して、表のページネーションを描画後に非表示にすることができます。 oSettingsを使用すると、テーブルの設定(ページごとのレコード、テーブル固有のセレクターなど)について何も知る必要がありません。

以下は、ページごとの表示の長さが合計レコードよりも大きいかどうかを確認し、ページ分割がある場合は非表示にします。

$('#your_table_selector').dataTable({
    "fnDrawCallback": function(oSettings) {
        if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) {
            $(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
        }
    }
});

ドキュメンテーション

74
sina

機能プラグイン conditionalPaging を参照してください。

使用法:

$('#myTable').DataTable({
    conditionalPaging: true
});

or

$('#myTable').DataTable({
    conditionalPaging: {
        style: 'fade',
        speed: 500 // optional
    }
});
30
mjhasbach

これは、JQuery DatatablesのV1.10 +で作業する場合の正しいアプローチです。通常、プロセスは以前のバージョンと同じですが、イベント名とAPIメソッドはわずかに異なります。

$(table_selector).dataTable({
    preDrawCallback: function (settings) {
        var api = new $.fn.dataTable.Api(settings);
        var pagination = $(this)
            .closest('.dataTables_wrapper')
            .find('.dataTables_paginate');
        pagination.toggle(api.page.info().pages > 1);
    }
});

ドキュメンテーション

19
mark.monteiro

@ sinaの使用@ GuiSimで言及された修正を含む.

このコードをデータテーブルの初期化リクエストに追加します。

[〜#〜] jquery [〜#〜]

"fnDrawCallback": function (oSettings) {
  var pgr = $(oSettings.nTableWrapper).find('.dataTables_paginate')
  if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) {
    pgr.hide();
  } else {
    pgr.show()
  }
}

またはそれでも良い交換

"fnDrawCallback": null 

datatables.jsでコードサイト全体に適用します。

4
DreamTeK

jQuery-次のオプションを試してみましたが、うまくいきました

    $("#your_tbl_selector").dataTable({
    "pageLength": 3,
    "autoWidth": false,
    "fixedHeader": {"header": false, "footer": false},
    "columnDefs": [{ "width": "100%", "targets": 0 }],
    "bPaginate": true,
    "bLengthChange": false,
    "bFilter": true,
    "bInfo": false,
    "bAutoWidth": false,
    "oLanguage": {
     "oPaginate": {
       "sNext": "",
       "sPrevious": ""
     }
   },
   "fnDrawCallback": function(oSettings) {                 
        if (oSettings._iDisplayLength >= oSettings.fnRecordsDisplay()) {
          $(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
        }
    }
});

DataTable出力ビュー

3
Aravind

@sinaのソリューションが好きです。よくやった。

しかし、私のものにはいくつかの必要な改善があります。 @sinaは、必要に応じて改ページを表示するためにelse部分を忘れました。そして、次のようにalllengthMenuオプションを定義する可能性を追加しました:

jQuery('#your_table_selector').dataTable({
    "lengthMenu": [[10, 25, 50, 100, 250, 500, -1], [10, 25, 50, 100, 250, 500, "All"]],

    "fnDrawCallback": function(oSettings) {
        if (oSettings._iDisplayLength == -1
            || oSettings._iDisplayLength > oSettings.fnRecordsDisplay())
        {
            jQuery(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
        } else {
            jQuery(oSettings.nTableWrapper).find('.dataTables_paginate').show();
        }
    }
});
3
algorhythm

このコールバック関数は、テーブルIDをハードコーディングすることなく、すべてのデータテーブルで一般的に機能します。

$('.data-table').dataTable({
    fnDrawCallback: function(oSettings) {
       if(oSettings.aoData.length <= oSettings._iDisplayLength){
         $(oSettings.nTableWrapper).find('.dataTables_paginate').hide();
       }
    }
});
2
Agu Dondo

私はこの目標を達成するために次のことをしています。これは上記では表現されていない、より動的な解決策です。最初に合計ページ数を取得してから、ページネーションの表示/非表示を決定します。このコードの美しさは、ユーザーがページの長さを変更した場合にのみ影響します。

jQuery('#example').DataTable({
    fnDrawCallback: function(oSettings) {
        var totalPages = this.api().page.info().pages;
        if(totalPages == 1){ 
            jQuery('.dataTables_paginate').hide(); 
        }
        else { 
            jQuery('.dataTables_paginate').show(); 
        }
    }
});
2
Faisal Janjua

この方法に従うこともできます。

"fnDrawCallback":function(){
      if(jQuery('table#table_id td').hasClass('dataTables_empty')){
            jQuery('div.dataTables_paginate.paging_full_numbers').hide();
      } else {
            jQuery('div.dataTables_paginate.paging_full_numbers').show();
      }
 }

これは私のために働いた。

1
$('#dataTable_ListeUser').DataTable( {

    //usual pager parameters//

    "drawCallback": function ( settings ) {

    /*show pager if only necessary
    console.log(this.fnSettings());*/
    if (Math.ceil((this.fnSettings().fnRecordsDisplay()) / this.fnSettings()._iDisplayLength) > 1) {
        $('#dataTable_ListeUser_paginate').css("display", "block");     
    } else {                
        $('#dataTable_ListeUser_paginate').css("display", "none");
    }

    }
   });
1
Matoeil

私はすべてのエントリのデータテーブルでsPaginationTypeをDynamicとして作成しようとしましたが、そのための適切な解決策が見つかりませんが、私がしたことは

"fnDrawCallback": function(oSettings) {
    $('select[name="usertable_length"]').on('change', function(e) {
        var valueSelected  = this.value;
        if ( valueSelected < 10 ) {
            $('.dataTables_paginate').hide();
        } else {
            $('.dataTables_paginate').show();
        }
    });
},
1
Kamal Kishor

以下をスタイルシートに追加するだけです:

.dataTables_paginate .paginate_button.disabled {
    display: none;
}
1
Nikita

私はこれが古い投稿であることを知っていますが、これを使用し、OCDを私のように使用する人にとっては、変更が必要です。

Ifステートメントを変更し、

if (oSettings._iDisplayLength > oSettings.fnRecordsDisplay()) 

if (oSettings._iDisplayLength >= oSettings.fnRecordsDisplay()) 

この小さな変更により、10、25、50、100を超えるレコード長のページ区切りボタンが表示されますが、10ページ、25などのレコードのみのページ区切りボタンは1ページビューのままです。

0
Ray

データが動的ではない場合、つまりサーバーがHTMLテーブルを生成し、それがDataTablesによって拡張されると、サーバーでページングオプションをレンダリングできます(私はrazorを使用しています)。

$("#results").dataTable({
  paging: @(Model.ResultCount > Model.PageSize ? "true" : "false"),
  // more ...
});
0
Julian Lettner

これは私の問題を解決しました:

.dataTables_paginate .disabled {
   display:none;
}   
dataTables_paginate .disabled + span {
   display:none;
}   

それがあなたのすべてに役立つことを願っています

0
Nageshwar Jha

これが私のソリューションです。同じページに複数のテーブルがある場合にも機能します。たとえば、コリジョンを防ぎます(テーブルAにはページネーションが必要で、Bには必要ありません)。

私のコードのtableIdは決して定義されていません。テーブルのIDを定義していない場合、dataTableは「DataTables_Table_0」などの何かを追加することでそれを行います

    fnDrawCallback: function (oSettings) {
        if ($(this).DataTable().column(0).data().length <= oSettings._iDisplayLength) {
            var tableId = $(this).attr('id');
            $('#' + tableId + '_paginate').hide();
        }
    }
0
Yacine

DataTablesは実行時の機能の有効化と無効化をサポートしていないため、これは直接は不可能です。ただし、fnDrawCallback()関数を使用して、ページが1つだけかどうかを確認し、ページがある場合はページネーションコントロールを非表示にしてください。

0
Shiven