使用jquery在表中进行多列搜索(需要算法)?

时间:2013-09-24 11:35:38

标签: javascript jquery

我需要在表格中编写多列搜索。由于某些原因(支持问题),我无法使用数据表和表格排序器插件。我需要你在算法部分的帮助,我怎么能进行多列搜索。请不要给我已经创建的插件的链接,因为我已经更改了表结构,我无法使用它们。我需要这样的东西

datatables.net/examples/api/multi_filter.html

如果我能得到它的算法如何工作的提示,我将为我编写相同的功能。我已编写此代码,但它正在进行单列搜索,当我在另一列中搜索时,它会重置多列中的搜索。

function searchonKeyPress(input_text_box)
{

  var query =   $.trim(input_text_box.val());
  query = query.replace(/ /gi, '|');
  if(query=='undefined')
  return false;
  var index_input = input_text_box.closest("th").index();
  index = $("#freeze-tableFreeze .GridviewScrollItem tr:eq("+index_input+") td").length;    
  $("#freeze-tableFreeze .GridviewScrollItem").each(function() {
  var tr_ident = $(this).attr('tr_ident');  
  var column_text = $(".GridviewScrollItem[tr_ident='"+tr_ident+"'] td:eq("+index_input+")").text();
  (column_text.search(new RegExp(query, "i")) < 0) ?        $(this).hide().removeClass('visible') : $(this).show().addClass('visible');

  });
  pagignation(1);
}

我需要这样的东西:

enter image description here

3 个答案:

答案 0 :(得分:1)

这里最简单的解决方案是选择表中的所有td并使用jQuery :contains()选择器和搜索短语对其进行过滤,并突出显示行/列。

查看this简单示例。这将选择关键字“one”的所有单元格。

$('td:contains(one)').css('color', 'red');

更新:

带有搜索框代码的新sample

答案 1 :(得分:0)

对于过滤,您可以使用JQuery并手动迭代html标记,以显示/隐藏某些依赖于过滤条件的行......

我构建了一个如何实现这一目标的小例子。因为您没有提供任何代码,所以您必须采用它

http://jsfiddle.net/Elak/FxBhQ/

JQuery部分并不过分复杂,因为你必须将它扩展到你想拥有的功能......

$(document).ready(function () {
    $(".searchBox").change(function () {
        var search = $(this).val();
        $(".column").each(function () {

            if ($(this).text().indexOf(search)) {
                $(this).parent().hide();
            }
        });
    });
});

答案 2 :(得分:0)

如果要搜索所有表格,请尝试此操作:DEMO

如果您想按列搜索 ,请尝试:DEMO

HTML:

<table>
    <thead>
        <tr>
            <th>One<input type='text' class='search' /></th>
            <th>Two<input type='text' class='search' /></th>
            <th>Three<input type='text' class='search' /></th>
            <th>Four<input type='text' class='search' /></th>
        </tr>
    </thead>
    .........

JQuery的:

$('.search').blur(function(){
$("td").removeClass('selected','');
var index=$(this).index('.search')+1;

    $('.search').each(function(index , val){

        var tag=$(val).val();
       if(tag!='') $("tr td:contains("+tag+")").addClass('selected');

    });

});