私は、jQueryセレクターでのワイルドカードまたは正規表現(正確な用語はわかりません)の使用に関するドキュメントの後にいます。
私はこれを自分で探しましたが、構文とその使用方法に関する情報を見つけることができませんでした。誰かが構文のドキュメントがどこにあるか知っていますか?
編集:属性フィルターを使用すると、属性値のパターンに基づいて選択できます。
私は、jQueryセレクターでのワイルドカードまたは正規表現(正確な用語はわかりません)の使用に関するドキュメントの後にいます。
私はこれを自分で探しましたが、構文とその使用方法に関する情報を見つけることができませんでした。誰かが構文のドキュメントがどこにあるか知っていますか?
編集:属性フィルターを使用すると、属性値のパターンに基づいて選択できます。
回答:
James Padolseyは、正規表現を選択に使用できるようにする素晴らしいフィルターを作成しました。
あなたが次のものを持っているとしましょうdiv
:
<div class="asdf">
Padolseyの:regex
フィルターは次のように選択できます。
$("div:regex(class, .*sd.*)")
matchParams.join('')
とmatchParams.join(',')
)と一致していることを任意のパターン'undefined'
または'null'
一致するundefined
とnull
、それぞれ、。この2番目のバグは、テストされた値!== undefined
を!== null
最初に確認することで解決できます。どちらの方法でも、関数をに渡す方.filter()
が簡単で、わかりやすく、読みやすくなっています。
このfilter
関数を使用して、より複雑な正規表現マッチングを適用できます。
以下は、最初の3つのdivに一致する例です。
$('div')
.filter(function() {
return this.id.match(/abc+d/);
})
.html("Matched!");
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="abcd">Not matched</div>
<div id="abccd">Not matched</div>
<div id="abcccd">Not matched</div>
<div id="abd">Not matched</div>
これらは役に立ちます。
Containsで検索している場合は、次のようになります
$("input[id*='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Starts Withで検索すると、次のようになります。
$("input[id^='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Ends Withで検索すると、次のようになります。
$("input[id$='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
与えられた文字列ではない要素を選択したい場合
$("input[id!='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
名前にスペースで区切られた特定の単語を含む要素を選択する場合
$("input[name~='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
特定の文字列と等しいか、その文字列で始まりハイフンが続く要素を選択する場合
$("input[id|='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
id
Sは、識別子であること、スペースを含めることはできません、~=
例が何か他のもの、のように変更する必要がありclass
、識別子の空白区切りのリストです。のようなclass
ものは、~=
属性セレクターが意図したものです。
正規表現の使用が、属性が特定の文字列で始まるかどうかのテストに限定されている場合は、^
JQueryセレクターを使用できます。
たとえば、「abc」で始まるIDのdivのみを選択する場合は、次のように使用できます。
$("div[id^='abc']")
正規表現の使用を回避するための非常に便利なセレクターがたくさんあります:http : //api.jquery.com/category/selectors/attribute-selectors/
*=
。このように$("input[id*='__destroy'][value='true']")
var test = $('#id').attr('value').match(/[^a-z0-9 ]+/);
どうぞ!
jQuery関数を追加します。
(function($){
$.fn.regex = function(pattern, fn, fn_a){
var fn = fn || $.fn.text;
return this.filter(function() {
return pattern.test(fn.apply($(this), fn_a));
});
};
})(jQuery);
そして、
$('span').regex(/Sent/)
/ Sent /に一致するテキストを持つすべてのスパン要素を選択します。
$('span').regex(/tooltip.year/, $.fn.attr, ['class'])
/tooltip.year/に一致するクラスを持つすべてのスパン要素を選択します。
IDとクラスは引き続き属性であるため、必要に応じてそれらに正規表現属性フィルターを適用できます。詳細はこちら:http : //rosshawkins.net/archive/2011/10/14/jquery-wildcard-selectors-some-simple-examples.aspx
$("input[name='option[colour]'] :checked ")
私はちょうど私のリアルタイムの例を挙げています:
ネイティブJavaScriptでは、次のスニペットを使用して、IDが「select2-qownerName_select-result」で始まる要素を見つけました。
document.querySelectorAll("[id^='select2-qownerName_select-result']");
javascriptからjQueryに移行したとき、上記のスニペットを次のように置き換えました。
$("[id^='select2-qownerName_select-result']")