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

如何通过item自定义属性定位表格行并实现滚动到指定用户功能

提问内容

我找解决方案的时候发现,大部分相关问题都只讲了怎么通过id获取表格,方法如下:

document.getElementById("#tableID")

但我实际场景里的表格不像教程里那么规整,我需要实现下面这个函数:

function scrollToUser(user_id){ 
 xxxx?;
}

现有表格结构如下:

<div id="users">
    <table class="data table table-striped" width="100%" style="" id="table0">
        <thead>
            <tr>
                <th class="js--entity-list__header entity-list__header">
                    <span class="columnsSettings">&nbsp;</span>
                    <span class="sorter entity-list__header--fakelink js--orderAsc" order="1">Username <span class="js--orderIcon fa fa-chevron-up">
                    </span>
                </span>
            </th>
            <th class="js--entity-list__header entity-list__header">Source</th>
            <th class="js--entity-list__header entity-list__header">
                <span class="sorter entity-list__header--fakelink " order="2">Surname, First name <span class="js--orderIcon fa ">
                </span>
            </th>
            <th class="js--entity-list__header entity-list__header">Cost center</th>
            <th class="js--entity-list__header entity-list__header">Email</th>
            <th class="js--entity-list__header entity-list__header entity-list__header--icon">&nbsp;</th>
            <th class="js--entity-list__header entity-list__header entity-list__header--icon">&nbsp;</th>
            <th class="js--entity-list__header entity-list__header entity-list__header--icon">&nbsp;</th>
        </tr>
    </thead>
    <tbody>
        <tr class="js--entity-list__row " item="id17">
            <td class=" firstcell  ">admin</td>
            <td class=" ">Internal</td>
            <td class=" breakable">Administrator, System</td>
            <td class=" ">0</td>
            <td class=" "></td>
            <td class=" entity-list__icon-column ">
                <span class="">
                </span>
            </td>
            <td class=" entity-list__icon-column ">
                <span class="ico_user_edit icon fa fa-wrench" tooltip="0">
                </span>
            </td>
            <td class=" entity-list__icon-column ">
                <span class="">
                </span>
            </td>
        </tr>
        <tr class="js--entity-list__row " item="id28">
            <td class=" firstcell  ">login_0</td>
            <td class=" ">Internal</td>
            <td class=" breakable">surname_0, name_0</td>
            <td class=" ">10</td>
            <td class=" ">email_0</td>
            <td class=" entity-list__icon-column ">
                <span class="ico_role_access icon fa fa-credit-card" tooltip="1">
                </span>
            </td>
            <td class=" entity-list__icon-column ">
                <span class="ico_user_edit icon fa fa-wrench" tooltip="2">
                </span>
            </td>
            <td class=" entity-list__icon-column ">
                <span class="ico_user_delete icon fa fa-trash" tooltip="3">
                </span>
            </td>
        </tr>
        <tr class="js--entity-list__row " item="id29">
            <td class=" firstcell  ">login_1</td>
            <td class=" ">Internal</td>
            <td class=" breakable">surname_1, name_1</td>
            <td class=" ">10</td>
            <td class=" ">email_1</td>
            <td class=" entity-list__icon-column ">
                <span class="ico_role_access icon fa fa-credit-card" tooltip="4">
                </span>
            </td>
            <td class=" entity-list__icon-column ">
                <span class="ico_user_edit icon fa fa-wrench" tooltip="5">
                </span>
            </td>
            <td class=" entity-list__icon-column ">
                <span class="ico_user_delete icon fa fa-trash" tooltip="6">
                </span>
            </td>
        </tr>
    </tbody>
</table>

行的唯一标识是item属性,比如item="id28"就是id为28的用户对应的行,对应代码:

<tr class="js--entity-list__row " item="id28">

我希望调用scrollToUser(28)就能滚动到对应用户行。
目前我试了所有方法都没成功,调试过的代码如下:

var rows = $("#users,table,tbody")[2].rows;
for(item in rows){console.log(item.innerText);}
$(rows[0]).attr("item"); // 这里我能拿到属性值,但不知道怎么不硬编码下标[0]来搜索
$("#users,table,tbody > tr:eq(admin)").position();
var x = $("#users,table,tbody");
$([document.documentElement, document.body]).animate({ scrollTop: $(document.getElementById("table0").rows[1]).offset().top }, 2000);

我最困扰的点是,拿到类似row[2]的对象时,返回值类型都是object,我不清楚能调用哪些具体方法。


解决方案

可直接运行的实现代码

function scrollToUser(user_id){
    // 拼接item属性值,直接定位目标行
    const targetRow = $(`#users table tr[item="id${user_id}"]`);
    // 目标行不存在直接返回,避免报错
    if(targetRow.length === 0) return;
    // 执行滚动动画,-50为顶部偏移量,可根据页面顶部导航高度调整
    $('html, body').animate({
        scrollTop: targetRow.offset().top - 50
    }, 200);
}

核心说明

  • 选择器直接用jQuery的属性匹配规则,不需要手动遍历所有行,也不用硬编码下标,性能和可读性更高
  • 你之前代码的核心错误是选择器误用了逗号:$("#users,table,tbody")里的逗号是并列选择多个元素的意思,会同时选中#users、所有table、所有tbody,后代选择应该用空格分隔:$("#users table tbody")
  • 拿到DOM对象后如果不确定可调用的方法,用console.dir(对象)在控制台打印,就能看到完整的属性和方法列表;如果是jQuery包装的对象,可直接调用所有jQuery提供的DOM操作方法。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 12:39:00