woemler
woemler

Reputation: 7169

Iterating through and 'selecting' jQuery DataTables rows

I am using jQuery DataTables 1.10.3 to create a table with JSON data fetched from a web service. The data is linked to other elements on the page of my application such that when a user selects data points in one element, the DataTable should update and 'select' the complimentary rows (simply by adding the active class to the rows <tr> tag). Given the documentation, it would appear that this could be easily accomplished with something like this:

var table = $("#my-table").DataTable();
table.rows().each(function(r){
    if (r.data().category == 'XYZ'){
        r.node().to$().addClass("active");
    }
});

But this does not work, since .rows() returns an array of row indexes instead of row objects. Instead, I have implemented this:

var table = $("#my-table").DataTable();
table.rows().indexes().each(function(i){
    var r = table.row(i);
    if (r.data().category == 'XYZ'){
        r.node().to$().addClass("active");
    }
});

This works, but is incredibly slow, considering the relatively small number of records in the table (~3 seconds for 3000 rows). Is there a better way to iterate through DataTable rows that I am missing? Or is it possible to make a row selection based on data values? Are the documents incorrect about .rows() returning API objects?

Upvotes: 3

Views: 2646

Answers (1)

woemler
woemler

Reputation: 7169

Well, I found an answer to my second question:

Or is it possible to make a row selection based on data values?

var table = $("#my-table").DataTable();
table.rows(function(idx, data, node){
    return data.category == 'XYZ' ? true: false;
}).nodes().to$().addClass("active");

This run almost instantly, so it handles my use case, but I'd still like to know what the best way is to iterate through rows in a more general way.

Upvotes: 1

Related Questions