Count the total number of occurrences of a word in DataTables

Viewed 1581

I want to know the number of times a word appears in my table (DataTables)

var numberOccurence = $('tr > td:nth-child(2):contains("'+ word +'")').length;

The problem is that it looks only on the visible part of the table, that is, if there are 10 pages on DataTables, it only gives me the number of occurrences on the first page

How to do it?

EDIT Here is the Html

<div class="table-row">
  <div class="table-responsive">
    <table id="fileTable" class="table table-striped table-bordered">
      <thead>
        <tr>
          <th>Date</th>
          <th>Localisation</th>
          <th>User</th>
          <th>Like</th>
        </tr>
      </thead>
      <tbody>
        <?php foreach ($orders as $order) { ?>
        <tr>
          <td><?= $order['date'] ?></td>
          <td><?= $order['localisation'] ?></td>
          <td><?= $order['user'] ?></td>
          <td><?= $order['like'] ?></td>
        </tr>
        <?php } ?>
      </tbody>
    </table>
  </div>
</div>
2 Answers

Assuming that you are using DataTables plugin, you could search the data of DataTable using data()

// Column name to search
var colName = 'columnName';
// Column index to search
var colIndex = 2;

var term = 'word';

// Get reference of DataTables API
var tbl = $('#myTable').DataTable();

// Get data (array of rows)
var data = tbl.data();

// Use filter function to search for term
var occurence = data.toArray().filter(function(row) {
   // If data is array of objects
   return row[colName].indexOf(term) !== -1;
   // If data is array of strings
   return row[colIndex].indexOf(term) !== -1;
}).length;

You can check the documentation about data()

You are close, but use the $ API method along with the :contains selector instead :

var count = table.$('td:contains("'+ term +'")').length;

demo -> http://jsfiddle.net/mLqreyfg/

$() : Perform a jQuery selection action on the full table

Related