2008-10-10 7 views
492

Ich bin nach Dokumentation auf Wildcard oder mit regulären Ausdrücken (nicht sicher über die genaue Terminologie) mit einem jQuery-Selektor.jQuery-Selektor reguläre Ausdrücke

Ich habe dies selbst gesucht, aber nicht gelungen, Informationen über die Syntax zu finden und wie es zu benutzen. Weiß jemand, wo die Dokumentation für die Syntax ist?

EDIT: Die Attributfiltern können Sie anhand von Mustern eines Attributs Wert auszuwählen.

+0

Was muss es mit der aktuellen Antwort sehen? –

+11

Die Kommentare für diese Frage müssen gesperrt werden, damit niemand bedeutungslose Kommentare wie "ist berühmt" oder "berühmt in der Tat" macht. –

Antwort

290

James Padolsey erstellt eine wonderful filter, die Regex zur Auswahl verwendet werden kann.

Sagen Sie bitte die folgenden div haben:

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

Überprüfen Sie auch die official documentation on selectors:

<div class="asdf"> 

Padolsey des :regex Filter es wie so wählen kann.

+2

Ok. Ich war dort, aber ich wusste nicht wirklich, wonach ich suchte. Ich hatte einen anderen Blick und die Verwendung von Attributfiltern ist, was ich suchte. –

+1

ausgezeichnete Ressource! – iamserious

+0

Der Regex-Selektor von @padolsey funktioniert super.Hier ist ein Beispiel, in dem Sie über Text-, Datei- und Checkbox-Eingabefelder oder Textfelder damit iterieren können: $ j ('input: regex (type, text | datei | checkbox), textarea'). Je (function (index) { // ... }); –

642

Mit der Funktion filter können Sie kompliziertere Regex-Vergleiche anwenden. Hier ist ein Beispiel, das die ersten drei divs nur passen würde (Live-Demo here):

<div id="abcd"></div> 
<div id="abccd"></div> 
<div id="abcccd"></div> 
<div id="abd"></div> 
$('div') 
    .filter(function() { 
     return this.id.match(/abc+d/); 
    }) 
    .html("Matched!"); 
+135

+1 für eine einfache Lösung, die keine zusätzliche Bibliothek/Plugin benötigt. – maerics

+30

3 Jahre zu spät, aber ich habe nur jQuery Wildcards nachgeschlagen und fand das unglaublich hilfreich. Ich hasse es, Hunderte von Bibliotheken zu laden, wenn es vermieden werden kann. Das ist der ganze Grund, warum ich mit jQuery überhaupt angefangen habe, all die Funktionalität zu integrieren, die ich jemals haben könnte, mit ein paar einfachen und leistungsstarken Funktionen. – stevendesu

+2

@stevendesu: Und noch 3 Jahre später entschied ich mich, bei dieser Antwort zu bleiben, anstatt jQuery mit mehr Selektoren aufzublähen. –

1
$("input[name='option[colour]'] :checked ") 
17
var test = $('#id').attr('value').match(/[^a-z0-9 ]+/); 

Hier gehen Sie!

38

Wenn Ihre Verwendung von regulären Ausdrücken beschränkt zu testen, ob ein Attribut Start mit einer bestimmten Zeichenfolge, können Sie die^jquery Selektor

Zum Beispiel, wenn Ihr wollen nur div auszuwählen mit der ID mit „abc“ ab Sie können $("div[id^='abc']")

Eine Menge sehr nützliche Selektoren Verwendung von Regex zu vermeiden, finden Sie hier: http://api.jquery.com/category/selectors/attribute-selectors/

+0

Dies funktioniert nicht für die Groß- und Kleinschreibung keine Übereinstimmungen. Die .filter-Funktion passt besser zu diesen Bedürfnissen. – brainondev

+0

das war gut für mich, ich wollte nur sehen, ob es am Ende einer Eingabe-ID ein "__zerstörungs" gab, also habe ich '* =' so verwendet: '$ (" input [id * = '__ destroy'] [ value = 'true'] ")' – ryan2johnson9

183

Diese können hilfreich sein.

Wenn Sie mit dem zu finden sind Enthält dann wird es

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

wie dieser sein, wenn Sie von Beginnt mit zu finden sind, dann wird es

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

Wenn Sie mit dem zu finden sind endet mit dann wird es so

sein

Wenn Sie Elemente auswählen, welche id

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

nicht eine Zeichenkette ist, wenn Sie Elemente auswählen möchten, die id ein gegebenes Wort enthält, durch Leerzeichen getrennt

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

Wenn Sie Elemente auswählen möchten, die ID ist gleich einer gegebenen Zeichenfolge oder beginnend mit dieser Zeichenfolge gefolgt von einem Bindestrich

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

Großartige Antwort, aber 'id's, die Bezeichner sind [kann kein Leerzeichen enthalten] (https://www.w3.org/TR/CSS21/syndata.html#value -def-identifier), sollte das '~ =' Beispiel zu etwas anderem geändert werden, wie zum Beispiel 'class', was eine durch Leerzeichen getrennte Liste von Bezeichnern ist. Dinge wie "Klasse" sind das, wofür der '~ =' Attributselektor gedacht war. –

5

hinzufügen jQuery-Funktion,

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

Dann

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

alle Spanne Elemente auswählen, mit dem Text übereinstimmt/Sent /.

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

wählt alle span Elemente mit ihren Klassen übereinstimmen/tooltip.year/.

0

Wenn Sie nur Elemente auswählen möchten, die Zeichenfolge angegeben enthalten, dann können Sie folgende Selektor: Ich

In nativer JavaScript verwendet:

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

0

ich meine Echtzeit Beispiel nur geben Das folgende Snippet, um die Elemente mit IDs zu finden, beginnt mit "select2-qownerName_select-result".

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

Wenn wir von Javascript jQuery haben wir über Schnipsel durch die folgende ersetzt, die ohne Störung der Logik weniger Code verschoben Änderungen beinhaltet.

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