2

大文字と小文字を区別せず、:contains テキストで始まる単語のみに一致する jquerys :contains セレクターのプラグイン/拡張機能を探しています

「count」と入力すると、「account」の結果が得られないように

前もって感謝します

編集:私は次のようになりました

$.expr.pseudos.Contains = $.expr.createPseudo(function(arg) {
return function(elem) {
  var sentence = $(elem).text().trim().toLowerCase();
  var words = sentence.split(' ');
  arg = arg.toLowerCase();
  var args = arg.split(' ');
  var searchfound = true;

  for(var ix = 0, lx = args.length; ix < lx; ix++) {

    var thisfound = false;

    for(var i = 0, l = words.length; i < l; i++) {
      var wordpos = sentence.indexOf(words[i]);
      var restofsentence = sentence.slice(wordpos, wordpos+args[ix].trim().length);
      if(restofsentence == args[ix].trim() ){             
        thisfound = true;
      }
    }

    if (thisfound == false) {
      searchfound = false;
    }

  }

  return searchfound;  

};
});

すべての検索エントリの先頭から検索し、エントリの順序に関係なく、一致するものがあれば true を返します。

4

1 に答える 1

3

そのための独自の疑似セレクターを簡単に作成できます。

$.expr.pseudos.startsWith = $.expr.createPseudo(function(arg) {
    return function(elem) {
        return $(elem).text().trim().slice(0, arg.length).toLowerCase() == arg.toLowerCase();
    };
});

デモ

任意の単語を一致させるには、それらをスペースで分割し、コレクションを反復処理する必要があります。

$.expr.pseudos.anyWordStartsWith = $.expr.createPseudo(function(arg) {
    return function(elem) {
        var words = $(elem).text().trim().toLowerCase().split(' ');
        arg = arg.toLowerCase();

        for(var i = 0, l = words.length; i < l; i++) {
            if(words[i].slice(0, arg.length) == arg)
                return true;
        }

        return false;
    };
});

デモ

この関数は、サブジェクト要素のコンテンツtext()を取得し、空白を削除し、大文字と小文字を区別しない比較のために小文字に変換し、文字列を配列に分割します。スペースはリストの区切り文字("a b c" => ["a", "b", "c"])と見なされます。

arg次に、大文字と小文字を区別しない比較のために、検索フレーズであるを小文字に変換します。

単語の配列を繰り返し処理し、すべての単語の部分文字列をターゲットフレーズと比較します。件名の文字列の長さが文字より短いと後者が文句を言うの.slice(0, n)ではなく、私は使用しています。.substring(0, n)n

そのような一致が見つかった場合、反復はすぐに中断してtrueを返します。それ以外の場合は、コレクション全体を反復して、falseを返す最後の行に到達します。

于 2012-09-21T11:26:26.587 に答える