2012-04-16 16 views
1

イム: http://jquerymobile.com/test/docs/lists/lists-performance.htmljQueryのモバイルフィルタリングされたリスト - jQueryのモバイル検索フィルタリストを使用してのみ、文字列の先頭にマッチ

イムSOMERのパフォーマンスの問題を抱えて、私のリストは、一部の携帯電話にフィルタリングするには少し遅いです。パフォーマンスを向上させるために検索を変更したいので、検索テキストで始まる項目だけが返されます。

したがって '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/

はUPDATE - アイブ氏は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から何の "長さ" との比較あなたはソースにマッチしています。したがって、 "test"、 "tester"を渡すと、長さがの文字列が渡され、次に "test"という0,4のsubstr "tester"が表示されます。次に "test"は "test"に等しいのでtrueを返します。大文字小文字を区別しないように小文字にします。

フィルターのパフォーマンスを向上させる別のトリックは、1文字以上入力した後にのみフィルタリングします。

edit jQueryMobileのフィルタ関数は、 "true"はそれが見つからなかったことを意味すると考えているので、逆方向にする必要があります。 return pattern != text.substr(0, pattern.length);

+0

Iveは私のコードをどのように実装したかで私の質問を更新しましたが、動作しませんでした。 Imは、ドキュメントがその可能性について言及しているので、これはドキュメントのどこかに標準的な答えではありません。 – Evans

+0

私は関数が引数として期待しているものは本当にわかりません、私はあなたに一般的な考えを与えていました...しかし、あなたの関数名に余分な** 1 **があるかもしれません...すなわち 'startsWith1 'startsWith'の代わりに –

+0

申し訳ありませんが、コードを無効にするために一時的に1を追加しました。正しい方向に私を指摘してくれてありがとうが、私のjsはこれを把握するのに十分ではありません。私はブログ記事とドキュメントを探し続けています。私は他の人がImを何回もやったことを確信しています。 – Evans

0

これは私のために働いた。私はここで正規表現を使用していますので、同じことを達成するための異なる方法です。

しかし、私のコードが最初に動作しなかったのは、リスト項目の先頭と末尾にスペースがたくさんあったことです(デバッグ中に追加されていることがわかりました)。

私は試合を行う前にテキストをトリミングします。マッチする前にtext.trim()を実行するとJonathan Rownyの実装もうまくいくと感じています。

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

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

    return !matcher.test(text.trim()); 
}); 
関連する問題