2014-03-30 31 views
0

我有這段代碼有一個通過Footable的選擇字段過濾器。它可以工作,但是它會比所需要的更多的結果。例如:「國家期刊文章」選項用「國家期刊文章」和「國際期刊文章」過濾行。我怎樣才能讓它更精確?謝謝。Footable精細過濾

jQuery(function() { 
    jQuery('#projectos').footable().bind('footable_filtering', function (e) { 
     var selected = jQuery('.filter-status').find(':selected').text(); 
     if (selected && selected.length > 0) { 
     e.filter += (e.filter && e.filter.length > 0) ? ' ' + selected : selected; 
     e.clear = !e.filter; 
     } 
    }); 

    jQuery('.clear-filter').click(function (e) { 
     e.preventDefault(); 
     jQuery('.filter-status').val(''); 
     jQuery('#projectos').trigger('footable_clear_filter'); 
    }); 

    jQuery('.filter-status').change(function (e) { 
     e.preventDefault(); 
     jQuery('#projectos').trigger('footable_filter', {filter: jQuery('#filter').val()}); 
    }); 
    }); 
+0

,您可以包括JSFiddle還是Plunk? – Jeff

+0

這是住在這裏:http://cei.iscte-iul.pt/publicacoes/publicacoes-de-investigadores/ – AnaRita

+0

我在我的答案中提供了一個簡單的普拉克。我發現,當我使用JSFiddle或Plunk創建一個簡單的示例時,我可以更快地得到答案。 (我個人更喜歡使用plunk,但都很好)你提供的實例演示了你描述的問題,但它也有很多其他代碼,我不得不通過它們來查看你的Footable代碼。 – Jeff

回答

3

Footable過濾器,它使用整行的整個文本,它使用indexof()來測試。你可以在filterFunction函數的footable.filter.js中看到它。我不得不做3件事來解決這個問題。

  1. 更換window.footable.options.filter.filterFunction用我自己的功能
  2. 做一個每列的比賽,而不是整排。根據行中的HTML,列之間的空格可能會丟失,導致列的第一個單詞與前一列的最後一個單詞連接。
  3. 使用正則表達式匹配而不是indexof()。這可以讓你匹配整個單詞。舉個例子,如果你我們indexof()在「不要邪惡,因爲那不好」中返回「be」,將會返回6和15,即使15是一個完全不同的單詞的開始。

這裏的功能:(我敢肯定有改進的負載隨意編輯...。)

window.footable.options.filter.filterFunction = function(index) { 
     var $t = $(this), 
      $table = $t.parents('table:first'), 
      filter = $table.data('current-filter').toUpperCase(), 
      columns = $t.find('td'); 

     var regEx = new RegExp("\\b" + filter + "\\b"); 
     var result = false; 
     for (i = 0; i < columns.length; i++) { 
      var text = $(columns[i]).text(); 
      result = regEx.test(text.toUpperCase()); 
      if (result === true) 
      break; 

      if (!$table.data('filter-text-only')) { 
      text = $(columns[i]).data("value"); 
      if (text) 
       result = regEx.test(text.toString().toUpperCase()); 
      } 

      if (result === true) 
      break; 
     } 

     return result; 
     }; 

您可以在這裏找到一個普拉克:http://plnkr.co/edit/P2DWDtyHP3xmoUIcvgDe

+0

你指的是哪個版本的FooTable?我知道FT2與FT3有很大的不同...... – barrypicker

+0

這是V2版。 – Jeff