3

我需要使用 shift 键在 jQuery 数据表中选择多行,与 shift 键选择功能相同,并将所选行项存储在变量中。我还需要使用点击事件选择多行。

使用单个变量,我需要传递实时点击行和移位选择行。我该怎么做?

这无法正常工作,并且不会为所选行存储单个变量。我哪里错了?

我的代码:

var aSelected = [];
var lastSelected;

$('#table tr').live('click', function (event) {
    var tableRow = $(this).closest("tr").prevAll("tr").length + 1;

    var id = this.cells[0].innerHTML;
    var index = jQuery.inArray(id, aSelected);
    if (index === -1) {
        aSelected.push(id);
    } else {
        aSelected.splice(index, 1);
    }

    $(this).toggleClass('row_selected');

    if (event.shiftKey) {
        var table = $('#table ');
        var start = Math.min(tableRow, lastSelected);
        var end = Math.max(tableRow, lastSelected);

        for (var i = start; i < end; i++) {
            $('#table').each(function () {
                table.find('tr:gt(' + (start - 1) + '):lt(' + (end) + ')').addClass('row_selected');
            });
        }

    } else {

        lastSelected = $(this).closest("tr").prevAll("tr").length + 1;
    }
});

例如我有 20 行。有 3 个原因我选择行并传递选定的行 id 1. 使用 Ctrl 键选择多行并传递 2. 使用 shift 键选择下一个 10 行并传递 3. 使用 shift 键选择下一个 10行和额外的 2 行使用 Ctrl 键其他 10 行并传递 12 行

4

2 回答 2

1

使用以下代码

     $('#tableId').dataTable( {

    "sDom": 'T<"clear">lfrtip',
    "oTableTools": {
        "sRowSelect": "multi",
        "aButtons": [ "select_all", "select_none" ]
    }
} );

通过使用此代码,您可以选择多行而不使用 shift 键

于 2013-02-26T05:24:00.660 回答
0

window.onmousemove = function (e) {
    shiftKey=false;
    if (e.shiftKey) shiftKey=true;
} 
dataTableID='yourDataTable';
$('#'+dataTableID).DataTable().on( 'select', function ( e, dt, type, indexes ) {                        
    thisID=e.currentTarget.id;
    selecting=$('#'+thisID).attr('selecting');
    if (typeof(selecting)=="undefined" || selecting=="false"){
        idx=indexes[0];
        lastSelected=$('#'+thisID).attr('lastSelected');
               
        if (shiftKey==true) {
            $('#'+thisID).attr('lastSelected',idx);
            if (typeof(lastSelected)!="undefined" && lastSelected !='') {   
                min=idx+1;
                max=lastSelected;
                if (max<min) {
                    tmp=min;
                    min=max;
                    max=tmp;                
                }
                if (min<max) {
                    $('#'+thisID).attr('selecting',"true");
                    for (x=min;x<max;x++) $('#'+thisID).DataTable().row( x ).select();
                    $('#'+thisID).attr('selecting',"false");                                    
                }
            }
        } else {
            $('#'+thisID).attr('lastSelected','');
        }
    }                    
});
$('#'+settings.sTableId).DataTable().on( 'deselect', function ( e, dt, type, indexes ) {                        
    thisID=e.currentTarget.id;
    $('#'+thisID).attr('lastSelected','');                 
}); 

于 2019-01-28T15:17:38.330 回答