最近在練習 datatables 這個好用的工具,他可以搭配 jQuery 跟 Bootstrap 讓你可以很快的建立有 RWD 的表格,他有非常豐富的 API 可以客製內容,今天示範一下怎麼使用 checkbox 去 filter 出符合的內容。
使用正規式
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/css/jquery.dataTables.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/jquery.dataTables.min.js"></script> <script> $(function() { let data = [ [ "Chan", "basketball" ], [ "Phoebe", "volleyball" ], [ "Lucas", "tennis" ], [ "LBJ", "basketball" ], ]; let table = $('#data_table').DataTable({ data: data }); $(':checkbox').on('click', function() { let options = $(':checkbox:checked').map(function() { return $(this).val() }).get(); if (options.length === 0) { table.columns(1).search('').draw(); } else { let regex = options.join('|'); table.columns(1).search(regex, true, false).draw(); } }); }); </script> </head> <body> <div> <label> basketball <input type="checkbox" value="basketball"> </label> <label> volleyball <input type="checkbox" value="volleyball"> </label> <label> tennis <input type="checkbox" value="tennis"> </label> </div> <table id="data_table"> <thead> <tr> <th>name</th> <th>hobby</th> </tr> </thead> <tbody></tbody> </table> </body> </html>
使用 extension
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/css/jquery.dataTables.min.css"> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/datatables/1.10.21/js/jquery.dataTables.min.js"></script> <script> $(function() { let data = [ [ "Chan", "basketball" ], [ "Phoebe", "volleyball" ], [ "Lucas", "tennis" ], [ "LBJ", "basketball" ], ]; let table = $('#data_table').DataTable({ data: data }); $.fn.dataTable.ext.search.push(function(settings, data) { let options = $(':checkbox:checked').map(function() { return $(this).val() }).get(); if (options.length === 0) { return true; } return options.indexOf(data[1]) !== -1; }); $(':checkbox').on('click', function() { table.draw(); }); }); </script> </head> <body> <div> <label> basketball <input type="checkbox" value="basketball"> </label> <label> volleyball <input type="checkbox" value="volleyball"> </label> <label> tennis <input type="checkbox" value="tennis"> </label> </div> <table id="data_table"> <thead> <tr> <th>name</th> <th>hobby</th> </tr> </thead> <tbody></tbody> </table> </body> </html>
上面使用交集的方法篩選,稍微改寫一下就可以變聯集了。
沒有留言:
張貼留言