2013-11-02 163 views
0

通過textfield(id =「preset_searchfield」)我可以通過jquery搜索我的表。只有包含搜索文本的行纔可見:JQuery搜索數組中的字符串

$("#tab_body tr").hide(); 
    $("#tab_body tr td:contains('" + $("#preset_searchfield").val() + "')").each(function(){ 
     $(this).parent().show(); 
    }); 

這是行得通的。現在我想搜索多個單詞分隔的空間。所以我分裂這樣的搜索字符串:

var searchString = $("#preset_searchfield").val(); 
    var searchArray = searchString.split(' '); 

我有什麼,以使含有從我的陣列的話中可見的所有行呢?

回答

0

的一種方法是使用jQuery.filter()方法

/* more efficient to loop over each row, and look at TD's within row*/ 
$('#tab_body tr').filter(function(){ 
    var isMatch=false, $cells=$(this).children(); 
    $.each(searchArray, function(i, searchStr){ 
     /* check if any of cells contain this search string*/ 
     if($cells.filter(':contains('+searchStr+')').length){ 
      isMatch=true; 
      /* stop looking at other values in array, found a match*/ 
      return false; 
     } 
    }) 
    return isMatch; 
}).show(); 
+0

謝謝,但輸入一個空格後一無所獲可見。當searchfield爲空時也沒有任何可見的東西。我在這裏做錯了什麼? – CinemaCope

+0

創建一個現場演示,展示你如何在jsfiddle.net中使用代碼 – charlietfl

+0

很確定我知道什麼問題是......你需要修剪搜索輸入中的空白......否則最終只有一個數組項是「空間」。或者檢查一下數組裏面沒有''「' – charlietfl

0

你可以這樣做太

var searchString = $("#preset_searchfield").val(); 
var searchArray = searchString.split(' '); 

for (x in searchArray) { 
    $('#tab_body tr:contains(' + searchArray[x] + ')').hide(); 
} 

的jsfiddle http://jsfiddle.net/jqwm8/

+0

性能明智將不得不循環整個表的每一個字...可能是昂貴的大桌 – charlietfl

+0

@charlietfl嘿tnx .. dint認爲這種方式..會記住這一點:) – Manish