You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataTable搜索时将首行首个TD设为激活状态(变色)

解决DataTable搜索后首行第一个单元格激活的问题

我明白你想要实现的效果:每次执行搜索操作后,把结果表格首行的第一个<td>设置为激活状态(改变颜色)。问题出在DataTable在搜索时会重新渲染表格内容,所以你需要监听表格的绘制完成事件,在每次搜索后重新应用样式。

下面是具体的解决步骤和修改后的代码:

步骤1:添加激活状态的CSS样式

首先在你的<style>标签里定义激活单元格的样式,你可以根据需求调整颜色和样式:

.active-cell {
    color: #dc3545; /* 红色示例,可替换成你需要的颜色 */
    font-weight: bold; /* 可选,增强视觉突出效果 */
}

步骤2:监听DataTable的绘制事件

DataTable每次搜索、分页或者排序后都会触发draw.dt事件,我们可以在这个事件里去设置首行第一个单元格的激活状态。需要注意先移除之前的激活样式,避免多个单元格残留样式。

修改你的JavaScript代码,添加事件监听:

$( document ).ready(function() {
    // 初始化DataTable并保存实例
    var table = $('#example').DataTable( {
        language: {
            searchPlaceholder: "Search records"
        },
        "ajax": {
            "type" : "POST",
            "url": "http://localhost/members.json",
            "dataSrc": function (json) {
                var return_data = new Array();
                for(var i=0;i< json.length; i++){
                    return_data.push({
                        'name': json[i].name,
                        'stargazerscount' : '<span onclick="f()">'+json[i].stargazerscount+'</span>',
                        'forkscount' : json[i].forkscount,
                        'description' : json[i].description
                    })
                }
                return return_data;
            }
        },
        "columns": [
            { "data": "name" },
            { "data": "stargazerscount" },
            { "data": "forkscount" },
            { "data": "description" }
        ]
    });

    // 监听表格绘制完成事件(搜索、分页、排序后都会触发)
    table.on('draw.dt', function() {
        // 先清除所有已有的激活样式
        $('#example tbody tr td.active-cell').removeClass('active-cell');
        // 找到首行第一个单元格,添加激活样式
        var firstTargetTd = $('#example tbody tr:first-child td:first-child');
        if (firstTargetTd.length > 0) {
            firstTargetTd.addClass('active-cell');
        }
    });

    // 页面初始化完成后,默认给首行第一个单元格设置激活样式
    table.on('init.dt', function() {
        $('#example tbody tr:first-child td:first-child').addClass('active-cell');
    });
});

为什么之前的尝试没生效?

因为DataTable在搜索时会动态销毁并重新创建表格的tbody内容,如果你只是在初始化时设置一次样式,搜索后新渲染的单元格并不会继承这个样式。通过监听draw.dt事件,每次表格重新绘制(包括搜索、分页、排序)时,我们都能重新定位到目标单元格并应用样式。

完整的HTML代码(包含样式)

<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.css">
<script type="text/javascript" charset="utf8" src="script.js"></script>
<style>
.active-cell {
    color: #dc3545;
    font-weight: bold;
}
</style>
</head>
<body>
<div class="col-md-12">
</div>
<div id="div">
<div>
<table id="example">
<thead>
<tr>
<th>name</th>
<th>stargazerscount</th>
<th>forkscount</th>
<th>description</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
</body>
</html>

这样修改后,每次搜索(或者分页、排序)后,结果表格的首行第一个单元格都会被设置为激活状态,样式会按照你定义的CSS生效。

内容的提问来源于stack exchange,提问作者A prasad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:59:22