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

GridJS如何获取选中行的数据?

GridJS如何获取选中行的数据?

嘿,我看到你现在在尝试用GridJS的选择插件获取选中行的数据,直接操作内部的store和cache确实容易出问题,而且代码也有点繁琐。其实GridJS的Selection插件本身就提供了更简单、更稳定的官方方法来获取选中行的数据,不用去折腾那些内部状态~

你可以试试用grid.plugins.selection.getSelectedRows()这个方法,它会直接返回所有选中行的对象,里面包含了你需要的单元格数据。我帮你修改了一下按钮点击事件的代码,这样就能轻松拿到你想要的Name、Released At和Artist字段了:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link href="https://unpkg.com/gridjs/dist/theme/mermaid.min.css" rel="stylesheet" />
</head>

<body>
    <div id="table"></div>
    <button id="btn">Clicca</button>
    <script src="https://unpkg.com/gridjs@6.1.1/dist/gridjs.production.min.js"></script>
    <script src="https://unpkg.com/gridjs@6.1.1/plugins/selection/dist/selection.umd.js"></script>
    <script>
        let grid = new gridjs.Grid({
            pagination: true,
            columns: [{
                    id: 'select',
                    name: 'Select',
                    plugin: {
                        component: gridjs.plugins.selection.RowSelection
                    }
                },
                'Name', 'Language', 'Released At', 'Artist'
            ],
            server: {
                url: 'https://api.scryfall.com/cards/search?q=Inspiring',
                then: data => data.data.map(card => [card.name, card.lang, card.released_at, card.artist])
            }
        }).render(document.getElementById("table"));
        

        document.getElementById('btn').addEventListener("click", function() {
            // 使用官方API获取选中行
            const selectedRows = grid.plugins.selection.getSelectedRows();
            
            // 遍历选中行,提取需要的数据
            selectedRows.forEach(row => {
                // row.cells是单元格数组,对应columns的顺序(从第二个开始是Name、Language...)
                const name = row.cells[1].data;
                const releasedAt = row.cells[3].data;
                const artist = row.cells[4].data;
                
                console.log('选中行数据: ', { name, releasedAt, artist });
            });
        })
    </script>

</body>

</html>

为什么推荐这个方法呢?因为你之前直接访问grid.config.store.state和pipeline.cache属于操作GridJS的内部私有状态,这些内容在版本更新时可能会被修改,导致代码失效。而官方提供的getSelectedRows()方法是公开API,会保持兼容性,用起来更靠谱。

另外,如果你需要在选中行变化时就实时获取数据,还可以监听Selection插件的selected事件,比如:

grid.plugins.selection.on('selected', (rows) => {
    console.log('实时选中的行: ', rows);
});

这样就能在用户勾选/取消勾选时立刻拿到选中行的数据啦~

备注:内容来源于stack exchange,提问作者ghost_of_the_code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 16:05:28