jQuery seçici düzenli ifadeler


580

Bir jQuery seçici ile joker karakter veya düzenli ifadeler (kesin terminoloji emin değilim) kullanma hakkında belgelerin peşindeyim.

Bunu kendim aradım ancak sözdizimi ve nasıl kullanılacağı hakkında bilgi bulamadım. Sözdizimi için belgelerin nerede olduğunu bilen var mı?

DÜZENLEME: Özellik filtreleri, bir özellik değerinin desenlerine göre seçim yapmanıza olanak tanır.

Yanıtlar:


339

James Padolsey, regex'in seçim için kullanılmasına izin veren harika bir filtre yarattı .

Aşağıdakilere sahip olduğunuzu varsayalım div:

<div class="asdf">

Padolsey'nin :regexfiltresi bunu şu şekilde seçebilir:

$("div:regex(class, .*sd.*)")

Ayrıca seçicilerle ilgili resmi belgelere de bakın .


3
Tamam. Orada bulundum ama aradığım şeyin adını gerçekten bilmiyordum. Ive başka bir bakış vardı ve öznitelik filtreleri kullanmak benim peşimde olan şeydir.
Joel Cunningham

@Padolsey tarafından regex seçici harika çalışıyor. Aşağıda metin, dosya ve onay kutusu giriş alanları veya metin alanı üzerinde yineleme yapabileceğiniz bir örnek bulunmaktadır: $ j ('input: regex (type, text | file | checkbox), textarea'). Each (function (index) {// ...});
Matt Setter

13
Aşağıdaki nickf cevabı kabul edilen cevap olmalıdır. Bu cevabı okuyorsanız, bu cevabı okuduğunuzdan emin olun!
Quentin Skousen

5
Hata alıyorum: Sözdizimi hatası, tanınmayan ifade: desteklenmeyen sözde: regex
ryan2johnson9

2
-1. Bunu uygulamak için kod cevaba dahil değildir ve çürümeye duyarlıdır. O (değiştirerek çözüldü bunları içeren düzenli ifadeler gelen virgül düşecek - Ayrıca, ben kod test ederken iki böcek bulundu matchParams.join('')ile matchParams.join(',')) ve maçları herhangi desen 'undefined'veya 'null'maç olacak undefinedve nullsırasıyla. Bu ikinci hata, test edilen değerin kontrol edilmesiyle !== undefinedve !== nullilk olarak çözülebilir . Her iki durumda da, bir işlevi geçmek .filter()daha kolaydır ve bana daha temiz / daha okunaklı geliyor.
James T

732

filterDaha karmaşık normal ifade eşleştirmesi uygulamak için işlevi kullanabilirsiniz .

İlk üç div ile eşleşen bir örnek:

$('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>


eşleşme yerinde değişkenlerin nasıl kullanılacağı (/ abc + d /); ?
Sasi varna kumar

2
@Sasivarnakumar Bu sorunun cevabı burada
Felipe Maia

283

Bunlar yardımcı olabilir.

Eğer Contains tarafından bulursanız o zaman böyle olacak

    $("input[id*='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

Eğer Starts With ile buluyorsanız, bu böyle olacak

    $("input[id^='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

Eğer Ends With ile buluyorsanız, bu böyle olacak

     $("input[id$='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

Belirli bir dize olmayan kimliğe sahip öğeleri seçmek istiyorsanız

    $("input[id!='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

Boşluğa göre ayrılmış, belirli bir sözcük içeren adın öğelerini seçmek istiyorsanız

     $("input[name~='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

Belirli bir dizeye eşit olan kimliğe eşit olan veya bu dizeyle başlayan ve ardından kısa çizgi olan öğeleri seçmek istiyorsanız

     $("input[id|='DiscountType']").each(function (i, el) {
         //It'll be an array of elements
     });

3
Harika bir cevap, ancak idtanımlayıcılar olarak boşluk içeremezler , ~=örnek başka bir şeye değiştirilmelidir , örneğin classbeyaz boşlukla sınırlandırılmış tanımlayıcılar listesi. Gibi şeyler classnelerdir ~=özellik seçici için tasarlandı.
Yararsız Kod

49

Normal ifadeyi kullanımınız, bir özniteliğin belirli bir dizeyle başlayıp başlamadığını test etmekle sınırlıysa, ^JQuery seçicisini kullanabilirsiniz .

Örneğin, yalnızca "abc" ile başlayan kimliğe sahip div seçmek istiyorsanız şunları kullanabilirsiniz:

$("div[id^='abc']")

Normal ifade kullanımından kaçınmak için çok sayıda yararlı seçici burada bulabilirsiniz: http://api.jquery.com/category/selectors/attribute-selectors/


büyük / küçük harfe duyarlı olmayan eşleşme gereksinimleri için bu işe yaramaz. .Filter işlevi bu ihtiyaçlara daha iyi uyar.
brainondev

2
Bu benim için iyi oldu, ben sadece bir giriş kimliği sonunda bir '__destroy' olup olmadığını görmek istedim, bu yüzden şöyle kullanılır *=:$("input[id*='__destroy'][value='true']")
ryan2johnson9


8

JQuery işlevi ekleme,

(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);

Sonra,

$('span').regex(/Sent/)

metin eşleşmeleri / Gönderilmiş / ile tüm yayılma öğelerini seçer.

$('span').regex(/tooltip.year/, $.fn.attr, ['class'])

sınıfları / tooltip.year/ ile eşleşen tüm span öğelerini seçecektir.




2

Sadece gerçek zamanlı örneğimi veriyorum:

Yerel javascript kimlikleri "select2-qownerName_select-sonuç" ile başlayan öğeleri bulmak için aşağıdaki snippet'i kullandım.

document.querySelectorAll("[id^='select2-qownerName_select-result']");

Javascript'ten jQuery'ye geçtiğimizde, yukarıdaki kod parçasını, mantığı bozmadan daha az kod değişikliği içeren aşağıdakilerle değiştirdik.

$("[id^='select2-qownerName_select-result']")


Sadece seçenek jQuery olmadan buldum ve en verimli olanı. Teşekkür ederim!
ggonmar

1

Sadece belirli bir dize içeren öğeleri seçmek istiyorsanız, aşağıdaki seçiciyi kullanabilirsiniz:

$(':contains("search string")')

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.