2012-04-16 45 views
1

即时通讯使用jQuery移动搜索筛选器列表的开头: http://jquerymobile.com/test/docs/lists/lists-performance.htmljQuery Mobile的筛选的列表 - 只匹配字符串

林有SOMER性能问题,我的名单是在某些手机上过滤有点慢。为了尝试和提高性能,我想更改搜索范围,以便只返回以搜索文本开头的项目。

所以'现在'找到结果'巴黎',但我希望这改变了。我可以从下面的文档中看到它的可能性,但我不知道如何实现代码。

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) 

}); 

回答

0

可能是这个样子:

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

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

基本上你从0比较的 “长度” 是什么你匹配的来源。所以如果你通过“测试”,“测试仪”它会看到你传递了一串长度为,然后substr“测试仪”从0,4,这给你“测试”。然后“测试”等于“测试”...所以返回true。将它们小写使其不区分大小写。

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

编辑它看起来jQueryMobile的过滤器函数期望“真”意味着它没有找到...所以它需要倒退。 return pattern != text.substr(0, pattern.length);

+0

我更新了我的问题,我如何实现你的代码,但它没有奏效。我很惊讶,这不是文档中的标准答案,因为文档提到了它的可能性。 – Evans 2012-04-16 15:32:20

+0

我真的不知道函数期望什么作为参数,我只是给你一般的想法......但是可能是因为你的函数名中有一个额外的** 1 ......即'startsWith1 '而不是'startsWith' – 2012-04-16 15:33:47

+0

对不起,我暂时添加了1来禁用代码。谢谢你指出我在正确的方向,但我的js不够好,以解决这个问题。我不断寻找博客文章和文档。我确信其他人已经完成了什么后,希望我希望找到一个教程。 – Evans 2012-04-16 15:36:07

0

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

但是,为什么我的代码最初没有工作的原因是,列表项在开始和结束时都有很多空格(发现它在调试时自己添加了它)。

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

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

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

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