2017-10-16 79 views
0

我的html頁面包含ajax,它有助於動態創建表格。如何引入使用javascript動態html表的分頁和排序?

<title>Clients</title> 
</head> 
<body> 
<table style="width:100%" id="clients_data"> 
<caption>Clients</caption> 
    <tr> 
    <th>Clients</th> 
    <th>Number of Sites</th> 
    <th>Reset the Processing</th> 
    </tr> 
    </table> 
<script> 
var myTable; 

$(document).ready(function() { 
    loadCustomers(); 
}); 


function loadCustomers() { 
    $.ajax({ 
     type: 'GET', 
     url: 'http://localhost:8080/cache/getCustomers', 
     dataType: 'json', 
     success: function(data) { 
      var rows = [];  
      $.each(data,function(id,value) { 
         rows.push('<tr><td><a href="clientSiteInfo.html?client='+id+'">'+id+'</td><td>'+value+'</td><td><button type="button" onclick="reset(\''+id+'\')">Reset</td></tr>'); 
        }); 
      $('#clients_data').append(rows.join('')); 
     } 
    }); 
}; 
</script> 
</body> 
</html> 

在運行時,我可能有100行填充在表中。我怎樣才能添加分頁,使用jQuery對這張表進行排序?

回答

1

下面是使用jQueryeach()index()toggle()Anonymous function一個非常簡單的例子。我利用HTML 5data-* attributes來跟蹤我的位置並設置要增加/減少的項目數量。

您可以使用插件或編寫自己的代碼,使分頁儘可能簡單或複雜。儘管我強烈建議使用AJAX來填充結果,因爲加載1000個隱藏/顯示結果可能會降低系統性能。

/* Variable Defaults */ 
 
var total = $('tbody > tr').length; 
 
var position = $('tbody').data('position'); 
 
var jump  = $('tbody').data('jump'); 
 
var paginate = function(position, jump) { 
 
    /* Show Default Items */ 
 
    $('tbody > tr').each(function() { 
 
     /* Variable Defaults */ 
 
     var index = $(this).index(); 
 

 
     /* Condition */ 
 
     var condition = (index >= position) && (index < position + jump); 
 

 
     /* Hide/Show Item */ 
 
     $(this).toggle(condition); 
 

 
     /* Set Disabled Status */ 
 
     $('.less').prop('disabled', (position - jump) < 0); 
 
     $('.more').prop('disabled', (position + jump) >= total); 
 
    }); 
 
}; 
 

 
/* Set Default Text */ 
 
$('.count').text(jump); 
 

 
/* Init Paginate */ 
 
paginate(position, jump); 
 

 
/* Bind Click Events to "Less" and "More" Button */ 
 
$('.less, .more').on('click', function() { 
 
    /* Decrease/Increase Position */ 
 
    position = $(this).hasClass('less') ? $('tbody').data('position') - jump : $('tbody').data('position') + jump; 
 

 
    /* Paginate */ 
 
    paginate(position, jump); 
 

 
    /* Update Position */ 
 
    $('tbody').data('position', position); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <thead> 
 
    <tr> 
 
     <td>ID</td> 
 
     <td>Name</td> 
 
     <td>Email</td> 
 
    </tr> 
 
    </thead> 
 
    <tbody data-position="0" data-jump="2"> 
 
    <tr> 
 
     <td>1</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>2</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>3</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>4</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>5</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>6</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>7</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>8</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>9</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    <tr> 
 
     <td>10</td> 
 
     <td>Test McTester</td> 
 
     <td>[email protected]</td> 
 
    </tr> 
 
    </tbody> 
 
</table> 
 

 
<button class="less">Back <span class="count">0</span></button> 
 
<button class="more">Forwards <span class="count">0</span></button>