有几种方法可以做到这一点。给大家分享三个。
打印出 HTML 中的所有行,但通过 jQuery 隐藏/显示
您提到您希望首先仅返回未归档的行来减少数据库负载。此解决方案不会减少页面加载时的数据库负载,因为它会获取所有这些并且只是使用 css 来隐藏它们
PHP/HTML
<?php
// ... db connection code etc.
$result = $mysqli->query("SELECT * FROM table");
while ($row = $result->fetch_assoc()) {
?>
<div class="<?php echo $row['archived'] ? 'archived' : 'notarchived' ?>">
<!-- all your html stuff here -->
</div>
<?php } ?>
<a id="toggle-archived" href="#">Toggle archived</a>
<?php
// ... clean up db/result close code etc.
CSS
.archived {
display: none;
}
JS
$(function() {
$('#toggle-archived').click(function() {
$('.archived').toggle();
});
});
另一种方法是刷新页面并在刷新时更改 sql 查询
PHP/HTML
<?php
// ... db connection code etc.
$showArchived = isset($_GET['show_archived']) && $_GET['show_archived'];
$sql = "SELECT * FROM table";
if (!$showArchived) {
$sql .= " WHERE archived = 0";
}
$result = $mysqli->query($sql);
while ($row = $result->fetch_assoc()) {
?>
<div>
<!-- all your html stuff here -->
</div>
<?php } ?>
<?php if ($showArchived) : ?>
<a href="/">Hide archived</a>
<?php else: ?>
<a href="/?show_archived=1">Show archived</a>
<?php endif; ?>
<?php
// ... clean up db/result close code etc.
第三种方法是通过 ajax 更改内容。可能与上面的类似,但您的 javascript 看起来像:
$(function(){
$('#toggle-archived').click(function(){
$.post('page.php', data, function(resp) {
$('#dataTable').html(resp);
});
});
});