Javascript 您只希望选择或取消选择一个单元格。因此,在上面的函数中,将所有tr替换为td。与此类似$('#table tbody').on('click','td',function(){if($(this).hasClass('selected')){$(this.

Javascript 您只希望选择或取消选择一个单元格。因此,在上面的函数中,将所有tr替换为td。与此类似$('#table tbody').on('click','td',function(){if($(this).hasClass('selected')){$(this.,javascript,jquery,datatables,Javascript,Jquery,Datatables,您只希望选择或取消选择一个单元格。因此,在上面的函数中,将所有tr替换为td。与此类似$('#table tbody').on('click','td',function(){if($(this).hasClass('selected')){$(this.removeClass('selected');//do this}else{table.$('td.selected').removeClass('selected');$(this.addClass('selected'));//这样做})


您只希望选择或取消选择一个单元格。因此,在上面的函数中,将所有tr替换为td。与此类似$('#table tbody').on('click','td',function(){if($(this).hasClass('selected')){$(this.removeClass('selected');//do this}else{table.$('td.selected').removeClass('selected');$(this.addClass('selected'));//这样做});不要点击任何子行,如图所示,我可以点击子行,同样,不要点击任何子行我不确定我是否完全理解这个问题。。但我认为,您只需要选择或取消选择一个单元格,而不是整行。因此,在上面的函数中,将所有tr替换为td。与此类似$('#table tbody').on('click','td',function(){if($(this).hasClass('selected')){$(this.removeClass('selected');//do this}else{table.$('td.selected').removeClass('selected');$(this.addClass('selected'));//这样做});不要单击任何子行,如图所示,我可以单击子行,再次,不要单击任何子行亲爱的Bindrid,你有一个好主意,但我检查并检测:当单击详细信息控制(fa square)时,我仍然选择子行,当主行未选择Dear Bindrid时,你有一个好主意,但我检查并检测:当单击详细信息控制(fa square)时,当未选择主行时,我仍然选择子行
$('#table tbody').on('click', 'tr', function () {
            if ($(this).hasClass('selected')) {
                $(this).removeClass('selected');
                //do this
            }
            else {
               table.$('tr.selected').removeClass('selected');
               $(this).addClass('selected');
               //do this
            }
        });
 $(document).ready(function () {

     // Normal table definition
     var table = $('#example').DataTable({
         "data": testdata.data,
         select:"single",
         "columns": [
             {
                 "className": 'details-control',
                 "orderable": false,
                 "data": null,
                 "defaultContent": '',
                 "render": function () {
                     return '<i class="fa fa-plus-square" aria-hidden="true"></i>';
                 },
                 width:"15px"
             },
             { "data": "name" },
             { "data": "position" },
             { "data": "office" },
             { "data": "salary" }
         ],
         "order": [[1, 'asc']]
     });

     // Add event listener for opening and closing details
     // Note the click event is only on the cell with the details-control class
     $('#example tbody').on('click', 'td.details-control', function () {
         var tr = $(this).closest('tr');
         var tdi = tr.find("i.fa");
         var row = table.row(tr);

         if (row.child.isShown()) {
             // This row is already open - close it
             row.child.hide();
             tr.removeClass('shown');
             // change the two font awesome icons
             tdi.first().removeClass('fa-minus-square');
             tdi.first().addClass('fa-plus-square');
         }
         else {
             // Open this row
             row.child(format(row.data())).show();
             tr.addClass('shown');
             tdi.first().removeClass('fa-plus-square');
             tdi.first().addClass('fa-minus-square')
         }
     });

     // This event handler prevents the details-control from changing the select row from occurring 
     table.on("user-select", function (e, dt, type, cell, originalEvent) {
         if ($(cell.node()).hasClass("details-control")) {
             e.preventDefault();
         }
     })
 });
   $(document).ready(function () {

        var table = $('#example').DataTable({
            "data": testdata.data,
            select: "single",
            "columns": [
                {
                    "className": 'details-control',
                    "orderable": false,
                    "data": null,
                    "defaultContent": '',
                    "render": function () {
                        // Use Font Awesome for the expander in the first cell
                        return '<i class="fa fa-plus-square" aria-hidden="true"></i>';
                    },
                    width: "15px"
                },
                { "data": "name" },
                { "data": "position" },
                { "data": "office" },
                { "data": "salary" }
            ],
            "order": [[1, 'asc']]
        });

        // Add event listener for opening and closing details
        $('#example tbody').on('click', 'td.details-control', function () {
            var tr = $(this).closest('tr');
            // get the Font Awesome container
            var tdi = tr.find("i.fa");
            var row = table.row(tr);

            if (row.child.isShown()) {
                // This row is already open - close it
                row.child.hide();
                tdi.first().removeClass('fa-minus-square');
                tdi.first().addClass('fa-plus-square');
            }
            else {
                // check to see if the child row exists.
                // dont want to overwrite it if its already there.
                if (row.child() && row.child().length > 0) {
                    row.child.show();
                }
                else {
                    // Open this row
                    row.child(format(row.data())).show();
                }
                tdi.first().removeClass('fa-plus-square');
                tdi.first().addClass('fa-minus-square');
            }
        });

        // Keeps the expander from being selected
        table.on("user-select", function (e, dt, type, cell, originalEvent) {
            if ($(cell.node()).hasClass("details-control")) {
                e.preventDefault();
            }
        });

        // If the parent row gets deselected by the user, deselect any
        // selected child rows
        table.on("deselect", function (e, dt, type, indexes) {
            if (type === 'row') {
                var child = dt.row(indexes[0]).child();
                if (child && child.length > 0) {
                    $(child[0]).find(".selected").removeClass("selected");
                }
            }
        });
        $("#example").on("click", ".dt-childtable tr", function () {
            var tr = $(this).closest("tr");
            var childTbl = tr.closest("table");
            var parentRow = childTbl.closest("tr").prev();

            // see if this row is already selected
            var isSelected = tr.hasClass("selected");
            // remove previous selects from child table
            childTbl.find(".selected").removeClass("selected");
            if (isSelected) {
                // this is a behavior question  do you want the parent row to deselect with 
                // when the child row  is.  
                //table.rows(parentRow).deselect();
            } else {
                tr.addClass("selected");
                // if the child is selected, make sure the parent is selected but
                // don't want to trigger a select event if the row 
                // is already  so check if selected 
                if (!$(table.row(parentRow).node()).hasClass("selected")) {
                    table.rows(parentRow).select();
                }
            }

        });
    });