【问题标题】:Highlight selected jsGrid row突出显示选定的 jsGrid 行
【发布时间】:2018-07-05 11:05:05
【问题描述】:

我发现this example 在选中一行后会突出显示它,但问题是它会在选择另一行后突出显示前一行。

这是部分代码

//js
rowClick: function(args) {
        var $row = this.rowByItem(args.item);

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

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

我找不到取消突出显示先前选择的行的解决方案

【问题讨论】:

  • 点击循环所有行以首先删除highlight类。然后将类添加到单击的行。

标签: javascript css jsgrid


【解决方案1】:

这个聚会有点晚了,但是@Narenda 接受的答案并没有完全解决我的问题。这可能会帮助以后偶然发现此问题的其他人。

如果您只需要一个选择,这里有一种方法:

扩展jsGrid插件,增加一个按索引找行的方法:

    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函数:

    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。这模仿了默认主题中的行悬停:

    tr.jsgrid-highlight-row td.jsgrid-cell {
         background:#c4e2ff;
         border-color:#c4e2ff;
    }

【讨论】:

  • 我更喜欢这个。 +1
【解决方案2】:

您可以通过以下步骤来实现

  1. 首先点击行,您需要像这样获得选定的行

    var selectedRow = $("#jsGrid").find('table tr.highlight').

  2. 然后就可以使用了

    selectedRow.toggleClass('highlight') or selectedRow.removeClass('highlight')

演示

$("#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
    }]
});
tr.highlight td.jsgrid-cell {
  background-color: green;
}
<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>

【讨论】:

    【解决方案3】:

    Se você veio em busca de uma solução na qual apenas 1 linha é selecionada e que também desseleciona a mesma linha, aqui está a solução:

    如果您来寻找一个解决方案,其中只选择了 1 行并且还取消选择同一行,这里是解决方案:

    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);
             }
    

    【讨论】:

      猜你喜欢
      • 2013-12-20
      • 2011-06-16
      • 1970-01-01
      • 2016-02-15
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2017-12-14
      • 2021-08-21
      相关资源
      最近更新 更多