jQuery Mobile Filtered List - 仅匹配字符串的开头

时间:2012-04-16 13:29:35

标签: jquery-mobile

我正在使用jQuery移动搜索过滤器列表: http://jquerymobile.com/test/docs/lists/lists-performance.html

我有一些性能问题,我的列表在某些手机上过滤有点慢。为了尝试提高性能,我想更改搜索,以便只返回以搜索文本开头的项目。

所以'aris'目前发现结果'paris',但我想要改变它。我可以从下面的文档中看到它可能,但我不知道如何实现代码。

http://jquerymobile.com/test/docs/lists/docs-lists.html

$("document").ready( function (){
  $(".ui-listview").listview('option', 'filterCallback', yourFilterFunction)
});

这似乎证明了你如何编写和调用自己的函数,但我不知道如何编写它!谢谢 http://blog.safaribooksonline.com/2012/02/14/jquery-mobile-tip-write-your-own-list-view-filter-function/

更新 - 我在单独的js文件中尝试了以下内容:

$("document").ready( function (){

  function beginsWith( text, pattern) {
  text= text.toLowerCase();
  pattern = pattern.toLowerCase();

  return pattern == text.substr( 0, pattern.length );
  }

  $(".ui-listview").listview('option', 'filterCallback', beginsWith)

});

2 个答案:

答案 0 :(得分:0)

可能看起来像这样:

function beginsWith( text, pattern) {
text= text.toLowerCase();
pattern = pattern.toLowerCase();

return pattern == text.substr( 0, pattern.length );
}

基本上,你从0到“长度”比较你匹配的来源。因此,如果您传入“test”,“tester”,它将会看到您传入一串长度为 4 的字符串,然后从0,4传入substr“tester”,这将为您提供“测试”。然后“test”等于“test”......所以返回true。将它们小写以使其不区分大小写。

提高过滤器性能的另一个技巧,只有在输入超过1个字符后才进行过滤。

编辑看来jQueryMobile的过滤器功能期望“true”意味着找不到它......所以它需要倒退。 return pattern != text.substr( 0, pattern.length );

答案 1 :(得分:0)

这对我有用。我在这里使用正则表达式,以实现同样的事情。

但是我的代码最初不起作用的原因是列表项在开头和结尾都有很多空格(发现它在调试时自己添加了它)。

所以我在做完比赛之前对文字进行修剪。我有一种感觉,如果我们在匹配之前做text.trim(),Jonathan Rowny的实现也会有效。

 $(".ui-listview").listview('option', 'filterCallback', function (text, searchValue) {

    var matcher = new RegExp("^" + searchValue, "i");

    return !matcher.test(text.trim());
});