如何将Datatables的rowGroup更改为仅允许一个打开的分组?

huangapple go评论67阅读模式
英文:

How to change Datatables rowGroup to only allow 1 open group?

问题

I use this script to extend/expand rowGroups in Datatables.<br>

var collapsedGroups = {}; //1

rowGroup: {
    // Uses the &#39;row group&#39; plugin
    dataSrc: &#39;data&#39;,
    startRender: function(rows, group) {
        var collapsed = !!collapsedGroups[group]; //2
         
    //LOOP THREW EAH ROW
    rows.nodes().each(function (r) {
        //SET DISPLAY = NONE
        r.style.display = &#39;none&#39;;
        //IF COLLAPSED (OPEN)
        if (collapsed) {
          //SET DISPLAY = SHOW
          r.style.display = &#39;&#39;;
        }
    });

   // Add category name to the &lt;tr&gt;. NOTE: Hardcoded colspan
  return $(&#39;&lt;tr/&gt;&#39;)
     .append(&#39;&lt;td&gt;&lt;/td&gt;&#39;)
     .attr(&#39;data-name&#39;, group)
     .toggleClass(&#39;collapsed&#39;, collapsed);
  }
},

//ON CLICK BTN EXPAND
$(document).on(&#39;click&#39;, &#39;i.fa-angle-down&#39;, function() {
    //GET TR DATA NAME
    var name = $(this).parent(&#39;td&#39;).parent(&#39;tr&#39;).data(&#39;name&#39;);
    //
    collapsedGroups[name] = !collapsedGroups[name]; //3
    //
    table.draw(false);
});

With this code, i'm able to have several groups open at the same time.<br>
Now i'm trying to only let one group to be open at a time.<br>

I've tried to change the obj collapsedGroups to a var:

var collapsedGroup; //1
var collapsed = collapsedGroup; //2
collapsedGroup = name; //3

But this did not work.<br>
How can i change the code to only allow one open group at a time?

JS FIDDLE<br>
https://jsfiddle.net/lbriquet/k2zr5Lws/1/

英文:

I use this script to extend/expand rowGroups in Datatables.<br>

var collapsedGroups = {}; //1
rowGroup: {
// Uses the &#39;row group&#39; plugin
dataSrc: &#39;data&#39;,
startRender: function(rows, group) {
var collapsed = !!collapsedGroups[group]; //2
//LOOP THREW EAH ROW
rows.nodes().each(function (r) {
//SET DISPLAY = NONE
r.style.display = &#39;none&#39;;
//IF COLLAPSED (OPEN)
if (collapsed) {
//SET DISPLAY = SHOW
r.style.display = &#39;&#39;;
}
});
// Add category name to the &lt;tr&gt;. NOTE: Hardcoded colspan
return $(&#39;&lt;tr/&gt;&#39;)
.append(&#39;&lt;td&gt;&lt;/td&gt;&#39;)
.attr(&#39;data-name&#39;, group)
.toggleClass(&#39;collapsed&#39;, collapsed);
}
},
//ON CLICK BTN EXPAND
$(document).on(&#39;click&#39;, &#39;i.fa-angle-down&#39;, function() {
//GET TR DATA NAME
var name = $(this).parent(&#39;td&#39;).parent(&#39;tr&#39;).data(&#39;name&#39;);
//
collapsedGroups[name] = !collapsedGroups[name]; //3
//
table.draw(false);
});

With this code, i'm able to have several groups open at the same time.<br>
Now i'm trying to only let one group to be open at a time.<br>

I've tried to change the obj collapsedGroups to a var:

var collapsedGroup; //1
var collapsed = collapsedGroup; //2
collapsedGroup = name; //3

But this did not work.<br>
How can i change the code to only allow one open group at a time?

JS FIDDLE<br>
https://jsfiddle.net/lbriquet/k2zr5Lws/1/

答案1

得分: 1

你需要在绘制完成事件上收集&lt;tr&gt;data-name,然后在单击&lt;tr&gt;时将其他名称的collapsedGroups更改为false,如下所示:

英文:

You need to collect data-name of &lt;tr&gt; on finish draw event then on click &lt;tr&gt; change collapsedGroups of other name to false like:

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-js -->

$(document).ready(function() {
var collapsedGroups = {};
var table = $(&#39;#example&#39;).DataTable({
paging: false,
order: [
[2, &#39;asc&#39;]
],
rowGroup: {
// Uses the &#39;row group&#39; plugin
dataSrc: 2,
startRender: function(rows, group) {
var collapsed = !!collapsedGroups[group];
rows.nodes().each(function(r) {
r.style.display = &#39;none&#39;;
if (collapsed) {
r.style.display = &#39;&#39;;
}
});
// Add category name to the &lt;tr&gt;. NOTE: Hardcoded colspan
return $(&#39;&lt;tr/&gt;&#39;)
.append(&#39;&lt;td colspan=&quot;8&quot;&gt;&#39; + group + &#39; (&#39; + rows.count() + &#39;)&lt;/td&gt;&#39;)
.attr(&#39;data-name&#39;, group)
.toggleClass(&#39;collapsed&#39;, collapsed);
}
}
});
let namesTable = [];
$(&#39;#example&#39;).on(&#39;draw.dt&#39;, function() {
namesTable = [...document.querySelectorAll(&#39;#example tr[data-name]&#39;)].map(el =&gt; el.dataset.name);
});
$(&#39;#example tbody&#39;).on(&#39;click&#39;, &#39;tr.group-start&#39;, function() {
var name = $(this).data(&#39;name&#39;);
namesTable.forEach(el =&gt; {
if (el !== name)
collapsedGroups[el] = false;
});
collapsedGroups[name] = !collapsedGroups[name];
table.draw(false);
});
});

<!-- language: lang-css -->

body {
font: 90%/1.45em &quot;Helvetica Neue&quot;, HelveticaNeue, Verdana, Arial, Helvetica, sans-serif;
margin: 0;
padding: 0;
color: #333;
background-color: #fff;
}

<!-- language: lang-html -->

&lt;script type=&quot;text/javascript&quot; src=&quot;//code.jquery.com/jquery-1.9.1.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/css/result-light.css&quot;&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;//nightly.datatables.net/css/jquery.dataTables.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;//nightly.datatables.net/js/jquery.dataTables.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;//cdn.datatables.net/rowgroup/1.0.2/css/rowGroup.dataTables.min.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;//cdn.datatables.net/rowgroup/1.0.2/js/dataTables.rowGroup.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;https://cdn.datatables.net/buttons/1.2.2/js/buttons.html5.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;//cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/pdfmake.min.js&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;//cdn.datatables.net/buttons/1.5.1/css/buttons.dataTables.css&quot;&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;//cdn.datatables.net/buttons/1.5.1/js/dataTables.buttons.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;//cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;//cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;//cdn.datatables.net/buttons/1.5.1/js/buttons.colVis.min.js&quot;&gt;&lt;/script&gt;
&lt;div class=&quot;container&quot;&gt;
&lt;table id=&quot;example&quot; class=&quot;display&quot; style=&quot;width:100%&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;th&gt;Office&lt;/th&gt;
&lt;th&gt;Age&lt;/th&gt;
&lt;th&gt;Start date&lt;/th&gt;
&lt;th&gt;Salary&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Tiger Nixon&quot;&gt;T. Nixon&lt;/td&gt;
&lt;td&gt;System Architect&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td data-order=&quot;1303689600&quot;&gt;Mon 25th Apr 11&lt;/td&gt;
&lt;td data-order=&quot;320800&quot;&gt;$320,800/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Garrett Winters&quot;&gt;G. Winters&lt;/td&gt;
&lt;td&gt;Accountant&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td data-order=&quot;1311552000&quot;&gt;Mon 25th Jul 11&lt;/td&gt;
&lt;td data-order=&quot;170750&quot;&gt;$170,750/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Ashton Cox&quot;&gt;A. Cox&lt;/td&gt;
&lt;td&gt;Junior Technical Author&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;td data-order=&quot;1231718400&quot;&gt;Mon 12th Jan 09&lt;/td&gt;
&lt;td data-order=&quot;86000&quot;&gt;$86,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Cedric Kelly&quot;&gt;C. Kelly&lt;/td&gt;
&lt;td&gt;Senior Javascript Developer&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td data-order=&quot;1332979200&quot;&gt;Thu 29th Mar 12&lt;/td&gt;
&lt;td data-order=&quot;433060&quot;&gt;$433,060/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Airi Satou&quot;&gt;A. Satou&lt;/td&gt;
&lt;td&gt;Accountant&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td data-order=&quot;1227830400&quot;&gt;Fri 28th Nov 08&lt;/td&gt;
&lt;td data-order=&quot;162700&quot;&gt;$162,700/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Brielle Williamson&quot;&gt;B. Williamson&lt;/td&gt;
&lt;td&gt;Integration Specialist&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td data-order=&quot;1354406400&quot;&gt;Sun 2nd Dec 12&lt;/td&gt;
&lt;td data-order=&quot;372000&quot;&gt;$372,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Herrod Chandler&quot;&gt;H. Chandler&lt;/td&gt;
&lt;td&gt;Sales Assistant&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td data-order=&quot;1344211200&quot;&gt;Mon 6th Aug 12&lt;/td&gt;
&lt;td data-order=&quot;137500&quot;&gt;$137,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Rhona Davidson&quot;&gt;R. Davidson&lt;/td&gt;
&lt;td&gt;Integration Specialist&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td data-order=&quot;1287014400&quot;&gt;Thu 14th Oct 10&lt;/td&gt;
&lt;td data-order=&quot;327900&quot;&gt;$327,900/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Colleen Hurst&quot;&gt;C. Hurst&lt;/td&gt;
&lt;td&gt;Javascript Developer&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;39&lt;/td&gt;
&lt;td data-order=&quot;1252972800&quot;&gt;Tue 15th Sep 09&lt;/td&gt;
&lt;td data-order=&quot;205500&quot;&gt;$205,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Sonya Frost&quot;&gt;S. Frost&lt;/td&gt;
&lt;td&gt;Software Engineer&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td data-order=&quot;1229126400&quot;&gt;Sat 13th Dec 08&lt;/td&gt;
&lt;td data-order=&quot;103600&quot;&gt;$103,600/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Jena Gaines&quot;&gt;J. Gaines&lt;/td&gt;
&lt;td&gt;Office Manager&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td data-order=&quot;1229644800&quot;&gt;Fri 19th Dec 08&lt;/td&gt;
&lt;td data-order=&quot;90560&quot;&gt;$90,560/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Quinn Flynn&quot;&gt;Q. Flynn&lt;/td&gt;
&lt;td&gt;Support Lead&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td data-order=&quot;1362268800&quot;&gt;Sun 3rd Mar 13&lt;/td&gt;
&lt;td data-order=&quot;342000&quot;&gt;$342,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Charde Marshall&quot;&gt;C. Marshall&lt;/td&gt;
&lt;td&gt;Regional Director&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td data-order=&quot;1224115200&quot;&gt;Thu 16th Oct 08&lt;/td&gt;
&lt;td data-order=&quot;470600&quot;&gt;$470,600/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Haley Kennedy&quot;&gt;H. Kennedy&lt;/td&gt;
&lt;td&gt;Senior Marketing Designer&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td data-order=&quot;1355788800&quot;&gt;Tue 18th Dec 12&lt;/td&gt;
&lt;td data-order=&quot;313500&quot;&gt;$313,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Tatyana Fitzpatrick&quot;&gt;T. Fitzpatrick&lt;/td&gt;
&lt;td&gt;Regional Director&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td data-order=&quot;1268784000&quot;&gt;Wed 17th Mar 10&lt;/td&gt;
&lt;td data-order=&quot;385750&quot;&gt;$385,750/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Michael Silva&quot;&gt;M. Silva&lt;/td&gt;
&lt;td&gt;Marketing Designer&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;66&lt;/td&gt;
&lt;td data-order=&quot;1353974400&quot;&gt;Tue 27th Nov 12&lt;/td&gt;
&lt;td data-order=&quot;198500&quot;&gt;$198,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Paul Byrd&quot;&gt;P. Byrd&lt;/td&gt;
&lt;td&gt;Chief Financial Officer (CFO)&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td data-order=&quot;1276041600&quot;&gt;Wed 9th Jun 10&lt;/td&gt;
&lt;td data-order=&quot;725000&quot;&gt;$725,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Gloria Little&quot;&gt;G. Little&lt;/td&gt;
&lt;td&gt;Systems Administrator&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td data-order=&quot;1239321600&quot;&gt;Fri 10th Apr 09&lt;/td&gt;
&lt;td data-order=&quot;237500&quot;&gt;$237,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Bradley Greer&quot;&gt;B. Greer&lt;/td&gt;
&lt;td&gt;Software Engineer&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td data-order=&quot;1350086400&quot;&gt;Sat 13th Oct 12&lt;/td&gt;
&lt;td data-order=&quot;132000&quot;&gt;$132,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Dai Rios&quot;&gt;D. Rios&lt;/td&gt;
&lt;td&gt;Personnel Lead&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;35&lt;/td&gt;
&lt;td data-order=&quot;1348617600&quot;&gt;Wed 26th Sep 12&lt;/td&gt;
&lt;td data-order=&quot;217500&quot;&gt;$217,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Jenette Caldwell&quot;&gt;J. Caldwell&lt;/td&gt;
&lt;td&gt;Development Lead&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td data-order=&quot;1315008000&quot;&gt;Sat 3rd Sep 11&lt;/td&gt;
&lt;td data-order=&quot;345000&quot;&gt;$345,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Yuri Berry&quot;&gt;Y. Berry&lt;/td&gt;
&lt;td&gt;Chief Marketing Officer (CMO)&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;40&lt;/td&gt;
&lt;td data-order=&quot;1245888000&quot;&gt;Thu 25th Jun 09&lt;/td&gt;
&lt;td data-order=&quot;675000&quot;&gt;$675,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Caesar Vance&quot;&gt;C. Vance&lt;/td&gt;
&lt;td&gt;Pre-Sales Support&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td data-order=&quot;1323648000&quot;&gt;Mon 12th Dec 11&lt;/td&gt;
&lt;td data-order=&quot;106450&quot;&gt;$106,450/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Doris Wilder&quot;&gt;D. Wilder&lt;/td&gt;
&lt;td&gt;Sales Assistant&lt;/td&gt;
&lt;td&gt;Sidney&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td data-order=&quot;1284940800&quot;&gt;Mon 20th Sep 10&lt;/td&gt;
&lt;td data-order=&quot;85600&quot;&gt;$85,600/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Angelica Ramos&quot;&gt;A. Ramos&lt;/td&gt;
&lt;td&gt;Chief Executive Officer (CEO)&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td data-order=&quot;1255046400&quot;&gt;Fri 9th Oct 09&lt;/td&gt;
&lt;td data-order=&quot;1200000&quot;&gt;$1,200,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Gavin Joyce&quot;&gt;G. Joyce&lt;/td&gt;
&lt;td&gt;Developer&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;42&lt;/td&gt;
&lt;td data-order=&quot;1292976000&quot;&gt;Wed 22nd Dec 10&lt;/td&gt;
&lt;td data-order=&quot;92575&quot;&gt;$92,575/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Jennifer Chang&quot;&gt;J. Chang&lt;/td&gt;
&lt;td&gt;Regional Director&lt;/td&gt;
&lt;td&gt;Singapore&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td data-order=&quot;1289692800&quot;&gt;Sun 14th Nov 10&lt;/td&gt;
&lt;td data-order=&quot;357650&quot;&gt;$357,650/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Brenden Wagner&quot;&gt;B. Wagner&lt;/td&gt;
&lt;td&gt;Software Engineer&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td data-order=&quot;1307404800&quot;&gt;Tue 7th Jun 11&lt;/td&gt;
&lt;td data-order=&quot;206850&quot;&gt;$206,850/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Fiona Green&quot;&gt;F. Green&lt;/td&gt;
&lt;td&gt;Chief Operating Officer (COO)&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;48&lt;/td&gt;
&lt;td data-order=&quot;1268265600&quot;&gt;Thu 11th Mar 10&lt;/td&gt;
&lt;td data-order=&quot;850000&quot;&gt;$850,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Shou Itou&quot;&gt;S. Itou&lt;/td&gt;
&lt;td&gt;Regional Marketing&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;20&lt;/td&gt;
&lt;td data-order=&quot;1313280000&quot;&gt;Sun 14th Aug 11&lt;/td&gt;
&lt;td data-order=&quot;163000&quot;&gt;$163,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Michelle House&quot;&gt;M. House&lt;/td&gt;
&lt;td&gt;Integration Specialist&lt;/td&gt;
&lt;td&gt;Sidney&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td data-order=&quot;1306972800&quot;&gt;Thu 2nd Jun 11&lt;/td&gt;
&lt;td data-order=&quot;95400&quot;&gt;$95,400/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Suki Burks&quot;&gt;S. Burks&lt;/td&gt;
&lt;td&gt;Developer&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td data-order=&quot;1256169600&quot;&gt;Thu 22nd Oct 09&lt;/td&gt;
&lt;td data-order=&quot;114500&quot;&gt;$114,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Prescott Bartlett&quot;&gt;P. Bartlett&lt;/td&gt;
&lt;td&gt;Technical Author&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td data-order=&quot;1304726400&quot;&gt;Sat 7th May 11&lt;/td&gt;
&lt;td data-order=&quot;145000&quot;&gt;$145,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Gavin Cortez&quot;&gt;G. Cortez&lt;/td&gt;
&lt;td&gt;Team Leader&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;22&lt;/td&gt;
&lt;td data-order=&quot;1224979200&quot;&gt;Sun 26th Oct 08&lt;/td&gt;
&lt;td data-order=&quot;235500&quot;&gt;$235,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Martena Mccray&quot;&gt;M. Mccray&lt;/td&gt;
&lt;td&gt;Post-Sales support&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td data-order=&quot;1299628800&quot;&gt;Wed 9th Mar 11&lt;/td&gt;
&lt;td data-order=&quot;324050&quot;&gt;$324,050/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Unity Butler&quot;&gt;U. Butler&lt;/td&gt;
&lt;td&gt;Marketing Designer&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td data-order=&quot;1260316800&quot;&gt;Wed 9th Dec 09&lt;/td&gt;
&lt;td data-order=&quot;85675&quot;&gt;$85,675/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Howard Hatfield&quot;&gt;H. Hatfield&lt;/td&gt;
&lt;td&gt;Office Manager&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td data-order=&quot;1229385600&quot;&gt;Tue 16th Dec 08&lt;/td&gt;
&lt;td data-order=&quot;164500&quot;&gt;$164,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Hope Fuentes&quot;&gt;H. Fuentes&lt;/td&gt;
&lt;td&gt;Secretary&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;41&lt;/td&gt;
&lt;td data-order=&quot;1265932800&quot;&gt;Fri 12th Feb 10&lt;/td&gt;
&lt;td data-order=&quot;109850&quot;&gt;$109,850/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Vivian Harrell&quot;&gt;V. Harrell&lt;/td&gt;
&lt;td&gt;Financial Controller&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;62&lt;/td&gt;
&lt;td data-order=&quot;1234569600&quot;&gt;Sat 14th Feb 09&lt;/td&gt;
&lt;td data-order=&quot;452500&quot;&gt;$452,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Timothy Mooney&quot;&gt;T. Mooney&lt;/td&gt;
&lt;td&gt;Office Manager&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td data-order=&quot;1228953600&quot;&gt;Thu 11th Dec 08&lt;/td&gt;
&lt;td data-order=&quot;136200&quot;&gt;$136,200/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Jackson Bradshaw&quot;&gt;J. Bradshaw&lt;/td&gt;
&lt;td&gt;Director&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td data-order=&quot;1222387200&quot;&gt;Fri 26th Sep 08&lt;/td&gt;
&lt;td data-order=&quot;645750&quot;&gt;$645,750/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Olivia Liang&quot;&gt;O. Liang&lt;/td&gt;
&lt;td&gt;Support Engineer&lt;/td&gt;
&lt;td&gt;Singapore&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td data-order=&quot;1296691200&quot;&gt;Thu 3rd Feb 11&lt;/td&gt;
&lt;td data-order=&quot;234500&quot;&gt;$234,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Bruno Nash&quot;&gt;B. Nash&lt;/td&gt;
&lt;td&gt;Software Engineer&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;38&lt;/td&gt;
&lt;td data-order=&quot;1304380800&quot;&gt;Tue 3rd May 11&lt;/td&gt;
&lt;td data-order=&quot;163500&quot;&gt;$163,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Sakura Yamamoto&quot;&gt;S. Yamamoto&lt;/td&gt;
&lt;td&gt;Support Engineer&lt;/td&gt;
&lt;td&gt;Tokyo&lt;/td&gt;
&lt;td&gt;37&lt;/td&gt;
&lt;td data-order=&quot;1250640000&quot;&gt;Wed 19th Aug 09&lt;/td&gt;
&lt;td data-order=&quot;139575&quot;&gt;$139,575/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Thor Walton&quot;&gt;T. Walton&lt;/td&gt;
&lt;td&gt;Developer&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;61&lt;/td&gt;
&lt;td data-order=&quot;1376179200&quot;&gt;Sun 11th Aug 13&lt;/td&gt;
&lt;td data-order=&quot;98540&quot;&gt;$98,540/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Finn Camacho&quot;&gt;F. Camacho&lt;/td&gt;
&lt;td&gt;Support Engineer&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td data-order=&quot;1246924800&quot;&gt;Tue 7th Jul 09&lt;/td&gt;
&lt;td data-order=&quot;87500&quot;&gt;$87,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Serge Baldwin&quot;&gt;S. Baldwin&lt;/td&gt;
&lt;td&gt;Data Coordinator&lt;/td&gt;
&lt;td&gt;Singapore&lt;/td&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td data-order=&quot;1333929600&quot;&gt;Mon 9th Apr 12&lt;/td&gt;
&lt;td data-order=&quot;138575&quot;&gt;$138,575/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Zenaida Frank&quot;&gt;Z. Frank&lt;/td&gt;
&lt;td&gt;Software Engineer&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;63&lt;/td&gt;
&lt;td data-order=&quot;1262563200&quot;&gt;Mon 4th Jan 10&lt;/td&gt;
&lt;td data-order=&quot;125250&quot;&gt;$125,250/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Zorita Serrano&quot;&gt;Z. Serrano&lt;/td&gt;
&lt;td&gt;Software Engineer&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;56&lt;/td&gt;
&lt;td data-order=&quot;1338508800&quot;&gt;Fri 1st Jun 12&lt;/td&gt;
&lt;td data-order=&quot;115000&quot;&gt;$115,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Jennifer Acosta&quot;&gt;J. Acosta&lt;/td&gt;
&lt;td&gt;Junior Javascript Developer&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td data-order=&quot;1359676800&quot;&gt;Fri 1st Feb 13&lt;/td&gt;
&lt;td data-order=&quot;75650&quot;&gt;$75,650/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Cara Stevens&quot;&gt;C. Stevens&lt;/td&gt;
&lt;td&gt;Sales Assistant&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td data-order=&quot;1323129600&quot;&gt;Tue 6th Dec 11&lt;/td&gt;
&lt;td data-order=&quot;145600&quot;&gt;$145,600/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Hermione Butler&quot;&gt;H. Butler&lt;/td&gt;
&lt;td&gt;Regional Director&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;47&lt;/td&gt;
&lt;td data-order=&quot;1300665600&quot;&gt;Mon 21st Mar 11&lt;/td&gt;
&lt;td data-order=&quot;356250&quot;&gt;$356,250/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Lael Greer&quot;&gt;L. Greer&lt;/td&gt;
&lt;td&gt;Systems Administrator&lt;/td&gt;
&lt;td&gt;London&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;td data-order=&quot;1235692800&quot;&gt;Fri 27th Feb 09&lt;/td&gt;
&lt;td data-order=&quot;103500&quot;&gt;$103,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Jonas Alexander&quot;&gt;J. Alexander&lt;/td&gt;
&lt;td&gt;Developer&lt;/td&gt;
&lt;td&gt;San Francisco&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td data-order=&quot;1279065600&quot;&gt;Wed 14th Jul 10&lt;/td&gt;
&lt;td data-order=&quot;86500&quot;&gt;$86,500/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Shad Decker&quot;&gt;S. Decker&lt;/td&gt;
&lt;td&gt;Regional Director&lt;/td&gt;
&lt;td&gt;Edinburgh&lt;/td&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td data-order=&quot;1226534400&quot;&gt;Thu 13th Nov 08&lt;/td&gt;
&lt;td data-order=&quot;183000&quot;&gt;$183,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Michael Bruce&quot;&gt;M. Bruce&lt;/td&gt;
&lt;td&gt;Javascript Developer&lt;/td&gt;
&lt;td&gt;Singapore&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td data-order=&quot;1309132800&quot;&gt;Mon 27th Jun 11&lt;/td&gt;
&lt;td data-order=&quot;183000&quot;&gt;$183,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td data-search=&quot;Donna Snider&quot;&gt;D. Snider&lt;/td&gt;
&lt;td&gt;Customer Support&lt;/td&gt;
&lt;td&gt;New York&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td data-order=&quot;1295913600&quot;&gt;Tue 25th Jan 11&lt;/td&gt;
&lt;td data-order=&quot;112000&quot;&gt;$112,000/y&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tfoot&gt;
&lt;tr&gt;
&lt;th&gt;Name&lt;/th&gt;
&lt;th&gt;Position&lt;/th&gt;
&lt;th&gt;Office&lt;/th&gt;
&lt;th&gt;Age&lt;/th&gt;
&lt;th&gt;Start date&lt;/th&gt;
&lt;th&gt;Salary&lt;/th&gt;
&lt;/tr&gt;
&lt;/tfoot&gt;
&lt;/table&gt;
&lt;/div&gt;

<!-- end snippet -->

I added the code with pure js (because i prefere it) but you can change it with jquery if you want.

答案2

得分: -1

要实现Datatables的rowGroup只允许同时打开一个分组,您需要跟踪当前打开的分组并在打开不同的分组时关闭其他分组。我希望下面我分享的代码可以解决您的问题。

var currentOpenGroup = null;
var collapsedGroups = {};

$('#example').DataTable({
    rowGroup: {
        dataSrc: 'group',
        startRender: function(rows, group) {
            var collapsed = !!collapsedGroups[group];

            if (group === currentOpenGroup) {
                collapsed = false;
            } else if (currentOpenGroup !== null && collapsedGroups[currentOpenGroup] === false) {
                collapsedGroups[currentOpenGroup] = true;
            }

            rows.nodes().each(function (r) {
                r.style.display = collapsed ? 'none' : '';
            });

            return $('<tr/>')
                .append('<td></td>')
                .attr('data-name', group)
                .toggleClass('collapsed', collapsed);
        }
    }
});

$(document).on('click', 'i.fa-angle-down', function() {
    var name = $(this).parent('td').parent('tr').data('name');

    if (name === currentOpenGroup) {
        currentOpenGroup = null;
        collapsedGroups[name] = true;
    } else {
        currentOpenGroup = name;
        for (var group in collapsedGroups) {
            if (group !== name) {
                collapsedGroups[group] = true;
            }
        }
        collapsedGroups[name] = false;
    }

    $('#example').DataTable().draw(false);
});

这段代码将实现您所需的功能。如果您有任何其他问题,请随时提问。

英文:

To change the Datatables rowGroup to only allow one open group at a time, you need to keep track of the currently open group and close the other when a different group opens. I hope the code I will share below will solve your problem.

<!-- begin snippet: js hide: false console: true babel: false -->

<!-- language: lang-html -->

var currentOpenGroup = null;
var collapsedGroups = {};
$(&#39;#example&#39;).DataTable({
rowGroup: {
dataSrc: &#39;group&#39;,
startRender: function(rows, group) {
var collapsed = !!collapsedGroups[group];
if (group === currentOpenGroup) {
collapsed = false;
} else if (currentOpenGroup !== null &amp;&amp; collapsedGroups[currentOpenGroup] === false) {
collapsedGroups[currentOpenGroup] = true;
}
rows.nodes().each(function (r) {
r.style.display = collapsed ? &#39;none&#39; : &#39;&#39;;
});
return $(&#39;&lt;tr/&gt;&#39;)
.append(&#39;&lt;td&gt;&lt;/td&gt;&#39;)
.attr(&#39;data-name&#39;, group)
.toggleClass(&#39;collapsed&#39;, collapsed);
}
}
});
$(document).on(&#39;click&#39;, &#39;i.fa-angle-down&#39;, function() {
var name = $(this).parent(&#39;td&#39;).parent(&#39;tr&#39;).data(&#39;name&#39;);
if (name === currentOpenGroup) {
currentOpenGroup = null;
collapsedGroups[name] = true;
} else {
currentOpenGroup = name;
for (var group in collapsedGroups) {
if (group !== name) {
collapsedGroups[group] = true;
}
}
collapsedGroups[name] = false;
}
$(&#39;#example&#39;).DataTable().draw(false);
});

<!-- end snippet -->

huangapple
  • 本文由 发表于 2023年4月19日 17:30:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/76052904.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定