2012-02-09 13 views
10

jQuery Webサイトのselectors listを見ると、属性のあるstarts-withとends-forのセレクタがあります。テキストを検索するための:containsセレクタもあります:シミュレーションを行うjQueryセレクタ:starts-withまたは:ends-withを使用してテキストを検索しますか?

alert($("div").find("span:contains(text)").html()); 

はjQueryが開始-とを使用して検索文字列の実装を持っているか、終了 - としていますか?

FYI:XMLオブジェクトを検索する必要があります。

答えて

15

私が知る限り、デフォルトではありませんが、$.expr[":"]http://jsfiddle.net/h6KYk/で独自の擬似セレクタを追加できます。

$.extend($.expr[":"], { 
    "starts-with": function(elem, i, data, set) { 
     var text = $.trim($(elem).text()), 
      term = data[3]; 

     // first index is 0 
     return text.indexOf(term) === 0; 
    }, 

    "ends-with": function(elem, i, data, set) { 
     var text = $.trim($(elem).text()), 
      term = data[3]; 

     // last index is last possible 
     return text.lastIndexOf(term) === text.length - term.length; 
    } 
}); 
+0

ああ、うわー。どうもありがとうございました。あなたのご意見に感謝します。あなたのプロセスを詳しく教えてください。各機能の "設定"と "私"の目的は何ですか?そして、データ[3]とは何ですか?ありがとうございました。 – user717236

+2

@ user717236: '$ .expr [": "]'で設定した関数は、いくつかの引数を渡して、特定の要素が渡すべきかどうかを決定します。 'elem'はテストする要素、' i'はカウンタです。 'data'はセレクタの値を含む配列です。 ':starts-with( 'foo')'を使って選択すると 'data [3]'は文字列 '' foo "'になります。 'set'はあなたの関数でフィルタリングされている全ての要素の集合です。 'div:starts-with( 'foo')'は全ての 'div'を' set'として渡し、それらは関数によってフィルタリングされます。 – pimvdb

+0

説明をいただきありがとうございます。@pimvdb。このトピックに関するより深い議論を提供する、私が見ることができるリソースはありますか?たとえば、各関数に4つのパラメータを指定したとします。これらの変数は、jQueryのfindメソッドの宣言(function(a){var b = this、c、d; ...})に関連していますか? – user717236

12

あなたはjQueryのを拡張し、あなたが含まれている機能を作成するためにfilter()機能を使用することができますしたくない:

$("div").find("span").filter(function() { 
    return $(this).text().indexOf(text) >= 0; 
}); 

または正規表現でのstartsWith関数を作成します。

var expression = new RegExp('^' + text); 
$("div").find("span").filter(function() { 
    return expression.test($.trim($(this).text())); 
}); 

endsWith関数は非常によく似ています。

var expression = new RegExp(text + '$'); 
$("div").find("span").filter(function() { 
    return expression.test($.trim($(this).text())); 
}); 

$.trim()の使用に注意してください.HTMLには多くの空白が含まれる可能性があるためです。

関連する問題