首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突出显示选定的jsGrid行

问突出显示选定的jsGrid行
EN

Stack Overflow用户
提问于 2018-07-05 11:05:05
回答 3查看 7.2K关注 0票数 3

我发现了这个例子,它在被选中后突出显示了一行,但问题是它保留了在另一行被选中后突出显示的前一行。

下面是代码的一部分

代码语言:javascript
复制
//js
rowClick: function(args) {
        var $row = this.rowByItem(args.item);

      $row.toggleClass("highlight");
    }, 

//css
tr.highlight td.jsgrid-cell {
    background-color: green;
}

我找不到取消高亮显示先前选中的行的解决方案

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-05 11:25:36

您可以通过以下步骤实现

  1. 首先,在行上单击,您需要像下面这样获得选定的行 var selectedRow = $("#jsGrid").find('table tr.highlight')。
  2. 然后你可以用 selectedRow.toggleClass('highlight') or selectedRow.removeClass('highlight')

演示

​

代码语言:javascript
复制
$("#jsGrid").jsGrid({
    width: "100%",
    height: "auto",
    paging: false,

    //for loadData method Need to set auto load true
    autoload: true,

    noDataContent: "Directory is empty",

    controller: {
        loadData: function(filter) {
            var data = [{
                nickname: "Test",
                email: "t@gmail.com"
            }, {
                nickname: "Test 1",
                email: "t1@gmail.com"
            }, {
                nickname: "Test 2",
                email: "t2@gmail.com"
            }, {
                nickname: "Test 3",
                email: "t3@gmail.com"
            }];
            return data;
        }
    },

    rowClick: function(args) {
        var $row = this.rowByItem(args.item),
            selectedRow = $("#jsGrid").find('table tr.highlight');

        if (selectedRow.length) {
            selectedRow.toggleClass('highlight');
        };
        
        $row.toggleClass("highlight");
    },

    fields: [{
        name: "nickname",
        type: "text",
        width: 80,
        title: "Name"
    }, {
        name: "email",
        type: "text",
        width: 100,
        title: "Email Address",
        readOnly: false
    }]
});
代码语言:javascript
复制
tr.highlight td.jsgrid-cell {
  background-color: green;
}
代码语言:javascript
复制
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid-theme.min.css" />
<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/jsgrid/1.5.3/jsgrid.min.js"></script>


<div id="jsGrid"></div>

​

票数 4
EN

Stack Overflow用户

发布于 2019-04-02 12:24:57

这次聚会有点晚了,不过“纳伦达”的回答并没有完全解决我的问题。这可能有助于其他人在以后偶然发现这件事。

如果您只需要一个选择,下面是一种方法:

使用一种方法扩展jsGrid插件,以便逐行查找索引:

代码语言:javascript
复制
    jsGrid.Grid.prototype.rowByIndex = function(arg){
        //this._content.find("tr")[arg] returns a DOM element instead of a jQuery object
        //Pass the DOM element to the find method to get a jQuery object representing it
        return this._content.find(this._content.find("tr")[arg]);
    };

修改@Narenda回答中的rowClick函数:

代码语言:javascript
复制
    rowClick: function ( args ) {
        //Deselect all rows
        for(var i = 0; i<this.data.length; i++){
            this.rowByIndex(i).removeClass("jsgrid-highlight-row");
        }

        //Everything else as per the previous answer
        var $row = this.rowByItem(args.item),
        selectedRow = $("#jsGrid").find('table tr.jsgrid-highlight-row');

        if (selectedRow.length) {
            selectedRow.toggleClass('jsgrid-highlight-row');
        };
        $row.toggleClass("jsgrid-highlight-row");
        //Any other code to run on item click
    }

并添加一些CSS。这将模拟默认主题中的行悬停:

代码语言:javascript
复制
    tr.jsgrid-highlight-row td.jsgrid-cell {
         background:#c4e2ff;
         border-color:#c4e2ff;
    }
票数 5
EN

Stack Overflow用户

发布于 2020-09-02 21:41:44

如果您来寻找的解决方案中只选择了1行,并且取消了同一行,下面是解决方案:

代码语言:javascript
复制
selectedVal = null;

$(document).ready(function(){
jsGrid.Grid.prototype.rowByIndex = function(arg) {
         //this._content.find("tr")[arg] returns a DOM element instead of a jQuery object
         //Pass the DOM element to the find method to get a jQuery object representing it
         return this._content.find(this._content.find("tr")[arg]);
     };
});

rowClick: function (args) {

             selectedVal = args.item;

             let $row = this.rowByItem(args.item);

             if ($row.hasClass("highlight") === false) {
                 //Deseleciona todas as linhas
                 for (let i = 0; i < this.data.length; i++) {
                     this.rowByIndex(i).removeClass("highlight");
                 }
                 $row.toggleClass("highlight");

             } else {
                 selectedVal = null;
                 $row.toggleClass("highlight");

             }
             console.log(selectedVal);
         }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51189719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档