1

我使用 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)

});
4

2 回答 2

0

可能看起来像这样:

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

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

基本上,您将与源匹配的内容从 0 到“长度”进行比较。所以如果你传入“test”,“tester”,它会看到你传入了一个长度为4的字符串,然后从 0,4 中减去“tester”,这给了你“test”。那么“test”等于“test”......所以返回true。将它们小写以使其不区分大小写。

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

编辑它似乎 jQueryMobile 的过滤器功能期望“真”意味着它没有被发现......所以它需要倒退。return pattern != text.substr( 0, pattern.length );

于 2012-04-16T15:21:42.040 回答
0

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

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

所以我在匹配之前对文本进行了修剪。我有一种感觉,如果我们在匹配之前执行 text.trim(),Jonathan Rowny 的实现也会起作用。

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

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

    return !matcher.test(text.trim());
});
于 2012-04-27T19:04:09.817 回答