Friday, May 17, 2024
 Popular · Latest · Hot · Upcoming
86
rated 0 times [  87] [ 1]  / answers: 1 / hits: 24278  / 11 Years ago, thu, june 27, 2013, 12:00:00

We are currently working on a web-based CRM. The project is going great except for a frustrating issue.



we are using the DataTable jQuery plug-in for almost every sortable tables in the application. Here is a list of active incidents.



Open



As you can see, the third column represents the type of the incidents (ticket, change request, service request, etc.)



Users requested a filter box placed on top of the previous table to filter the incidents types. For instance, if you choose Ticket only, every other type will be hidden. Up until now, everything is working.



In order to do so, every row has a CSS class that represents the incident type.




  • Row #1 : class=ticket

  • Row #2 : class=changeRequest



When the filter box value changes, the following javascript code is executed



$('table.sortable').each(function() {
for (var i = 0; i < rows.length; i++) {
if ($(rows[i]).hasClass(vClass)) $(rows[i]).hide();
}
});


where




  • vClass = The CSS class representing the incident type

  • rows = All dataTable rows, got from $(SomeDatatable).dataTable().fnGetNodes();

  • $('table.sortable') = All dataTables



Now, fasten your seatbelts (French liner). When you implicitly hide a row, dataTable still counts it.
Here is the fabulous result.



Datatable



That being explained, there goes the main question :
How am I supposed to tell dataTable that I want to hide rows without deleting them forever? DataTable already has a filter box but I need it to work independently along with the type filter box (not in image).



Is there a way to add a second filter, maybe?


More From » jquery

 Answers
5

You need to write a custom filter for that table. Example:



$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) {
if ($(oSettings.nTable).hasClass('do-exclude-filtering')) {
return aData[16] == '' || $('#chkShowExcluded').is(':checked');
} else return true;
});


In that example we dynamically add and remove the 'do-exclude-filtering' class to a table, and if it has the class, it checks each row to see if a given cell has a value. The logic can be anything you can dream up, just keep it fast (this is executed for every row, on every draw, for every table on the page (note it's added to a 'global' array in DT, not an individual instance)



Return true to include the row, return false to hide the row



Here is the datatable reference to use the afnFiltering capabilities: http://datatables.net/development/filtering



The advantage to this instead of using .fnFilter() is that this works ALONG WITH, so the user can still use the filtering box in the top right (by default, I see yours is bottom right) to further filter the results you choose to show them. In other words, say you hide all 'completed' items, so the user only sees 'incomplete' items in the table. Then they can still filter the table for 'laptop' and see only the rows that are BOTH incomplete and have 'laptop' in their description


[#77363] Wednesday, June 26, 2013, 11 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
alorac

Total Points: 262
Total Questions: 82
Total Answers: 97

Location: Libya
Member since Mon, Dec 7, 2020
4 Years ago
alorac questions
Sat, Oct 10, 20, 00:00, 4 Years ago
Tue, Sep 22, 20, 00:00, 4 Years ago
Wed, Jul 1, 20, 00:00, 4 Years ago
Wed, Jun 3, 20, 00:00, 4 Years ago
Sun, May 17, 20, 00:00, 4 Years ago
;