2016-07-09 63 views
0

我在我的网站上使用数据表(https://datatables.net),并希望用levenstein方法覆盖默认搜索功能。覆盖数据表默认搜索功能

我已经有了levenstein方法,但是我在抓取搜索框的值来测试它时遇到了问题。 Datatables添加的搜索框没有ID或名称或其他任何可轻松用于定位该元素的内容。

我能想到的2种方法来解决这个问题:

  1. 图如何让搜索框的值(用户输入值)
  2. 图如何隐藏搜索框不需关闭完全搜索并添加我自己的自定义输入。

这是我的。

$.fn.dataTable.ext.search.push(
    function(settings, data, dataIndex) { 
     var search = /* this should be the search box value */; 
     var title = data[1]; 

     return (title.toLowerCase().levenstein(search.toLowerCase()) < title.length) ? true : false; 
    } 
); 

你能帮我一个上面列出的选项之一。

谢谢。

+0

你不能afaik;搜索框只使用数据表API。实际上,你可能会破坏搜索方法,但是dt制作的gui只能使用API​​,这是要记住的主要事情。 – dandavis

回答

1

没有一个id或名称或其他任何

嗯,是的它确实有。这个工作对我来说:

$('#myTable_filter input').on('keypress', function(e) { 
    e.preventDefault(); 
    alert(e.which); 
}); 

只要进入搜索框并检查它(如果你不知道怎么做,在Chrome中,随便一个元素上单击鼠标右键,并选择检查),你可以看到这是如何为你自己工作的。数据表应用一个id(你的表名加上_filter)到包装输入框的div,它是div中唯一的输入框。所以这个选择器工作。您还需要执行preventDefault,以便在按键后DataTables搜索不会运行。

+0

谢谢,当我回家时我会试试这个。我可以通过隐藏#table_filter来隐藏搜索框。现在它只是让我的搜索正常运行。好像我的搜索在默认搜索后运行,所以不知道如何阻止他们的运行。当我回家时,我会尝试preventDefault(),但不知道它是否会起作用,因为我的好像是在他们之后。 –

+0

你可能是对的。当您执行preventDefault时,它会停止按键。如果您在应用您自己的搜索例程后以编程方式填充搜索框,那么可能会再次触发按键事件... – BobRodes

+0

此外,请查看[DataTables搜索事件](https://datatables.net/reference/event/search),它在重新绘制表之前触发,但是在将搜索条件应用于底层数据之后触发。在这种情况下,您可以防止默认设置,撤消应用搜索的键,应用您自己的搜索并重绘表格。您还可以通过抓住按键上的角色并防止它出现,从而防止将角色放入搜索框两次的抖动。 – BobRodes