Get filter options based on previously selected filter

Get filter options based on previously selected filter

chriscmuchriscmu Posts: 1Questions: 1Answers: 0

I want to be able to get values for a 2nd filter, based on the rows returned from the 1st selected filter (not all rows prior to filtering). Can anybody help with this? Sorry I could not get the first part of code to indent:

$.fn.dataTableExt.oApi.fnGetColumnData = function(oSettings, iColumn, bUnique, bFiltered, bIgnoreEmpty) {
// check that we have a column id
if (typeof iColumn == "undefined") return new Array();

    // by default we only want unique data
    if (typeof bUnique == "undefined") bUnique = true;

    // by default we do want to only look at filtered data
    if (typeof bFiltered == "undefined") bFiltered = false;

    // by default we do not want to include empty values
    if (typeof bIgnoreEmpty == "undefined") bIgnoreEmpty = true;

    // list of rows which we're going to loop through
    var aiRows;

    // use only filtered rows
    if (bFiltered == true) aiRows = oSettings.aiDisplay;
      // use all rows
    else aiRows = oSettings.aiDisplayMaster; // all row numbers

    // set up data array
    var asResultData = new Array();

    for (var i = 0, c = aiRows.length; i < c; i++) {
      iRow = aiRows[i];
      var aData = this.fnGetData(iRow);
      var sValue = aData[iColumn];

      if (sValue === undefined) continue;

        // ignore empty values?
      else if (bIgnoreEmpty == true && sValue.length == 0) continue;

        // ignore unique values?
      else if (bUnique == true && jQuery.inArray(sValue, asResultData) > -1) continue;

        // else push the value onto the result data array
      else asResultData.push(sValue);
    }

    return asResultData;
  }

  function fnCreateSelect(aData) {
    var r = '<select><option value=""></option>', i, iLen = aData.length;
    for (i = 0; i < iLen; i++) {
      r += '<option value="' + aData[i] + '">' + aData[i] + '</option>';
    }
    return r + '</select>';
  }


  var oTable = $('#ActivityIndex').dataTable({
      "sScrollY": calcDataTableHeight(),
      "iDisplayLength": 10,
      "bAutoWidth": true,
      "bPaginate": false,
      "bFilter": true,
      "aaSorting": [[6, 'desc'], [7, 'asc']],
      "aoColumns": [null, null, null, null, null, null, null, null, null, null, null, { "bSortable": false }, null],
      "bSortClasses": false
  });

  $(window).resize(function() {
    var oSettings = oTable.fnSettings();
    oSettings.oScroll.sY = calcDataTableHeight();
    oTable.fnDraw();
  });

  $($("tfoot")[1]).find("th").each(function(i) {
    if ($(this).hasClass("filterable")) {
        //sorting but ignoring upper or lowercases
      this.innerHTML = fnCreateSelect(oTable.fnGetColumnData(i).sort(charOrdA));
      $('select', this).change(function () {
          oTable.fnFilter(($(this).val() == "" ? "" : "^" + $(this).val() + "$"), i, true);
      });
    }
  });

  function charOrdA(a, b) {
    a = a.toLowerCase();
    b = b.toLowerCase();
    return (a > b) ? 1 : -1;
    return 0;
  }
This discussion has been closed.