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

これは私にとってはうまくいきました。ここでは正規表現を使用しているため、同じことを達成するための別の方法があります。

しかし、私のコードが最初に機能しなかった理由は、リスト項目の最初と最後に多くのスペースがあったためです (デバッグ中に独自に追加されたことがわかりました)。

そのため、一致を行う前にテキストをトリミングします。マッチングの前に 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 に答える
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" が得られます。次に、「テスト」は「テスト」に等しい...したがって、trueを返します。大文字と小文字を区別しないようにするには、小文字にします。

フィルターのパフォーマンスを向上させるもう 1 つの方法は、1 文字以上入力した場合にのみフィルターを適用することです。

編集jQueryMobile のフィルター関数は、「true」が見つからなかったことを意味すると想定しているようです...したがって、逆にする必要があります。return pattern != text.substr( 0, pattern.length );

于 2012-04-16T15:21:42.040 に答える