646 Stimmen

jQuery-Selektor reguläre Ausdrücke

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

Ich habe selbst danach gesucht, konnte aber keine Informationen über die Syntax und ihre Verwendung finden. Weiß jemand, wo die Dokumentation für diese Syntax zu finden ist?

EDIT: Mit den Attributfiltern können Sie anhand von Mustern eines Attributwerts auswählen.

771voto

nickf Punkte 517253

Sie können die filter Funktion, um einen komplizierteren Regex-Abgleich durchzuführen.

Hier ist ein Beispiel, das nur die ersten drei Divs abgleichen würde:

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

0 Stimmen

Wie kann man Variablen anstelle von match(/abc+d/); verwenden?

2 Stimmen

@Sasivarnakumar die Antwort auf diese Frage lautet aquí

361voto

Xenph Yan Punkte 80213

James Padolsey hat ein schöner Filter die die Verwendung von Regex für die Auswahl ermöglicht.

Angenommen, Sie haben Folgendes div :

<div class="asdf">

Padolsey's :regex Filter können Sie ihn wie folgt auswählen:

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

Prüfen Sie auch die offizielle Dokumentation über Selektoren .

UPDATE: : Syntax Verwerfung JQuery 3.0

Seit jQuery.expr[':'] die in Padolseys Implementierung verwendet wird, ist bereits veraltet und führt in der neuesten Version von jQuery zu einem Syntaxfehler. Hier ist sein Code an die Syntax von jQuery 3+ angepasst:

jQuery.expr.pseudos.regex = jQuery.expr.createPseudo(function (expression) {
    return function (elem) {
        var matchParams = expression.split(','),
            validLabels = /^(data|css):/,
            attr = {
                method: matchParams[0].match(validLabels) ?
                    matchParams[0].split(':')[0] : 'attr',
                property: matchParams.shift().replace(validLabels, '')
            },
            regexFlags = 'ig',
            regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g, ''), regexFlags);
        return regex.test(jQuery(elem)[attr.method](attr.property));
    }
});

3 Stimmen

Ok. Ich war schon dort, aber ich wusste nicht wirklich, wie das heißt, wonach ich gesucht habe. Ich habe noch einmal nachgesehen, und die Verwendung von Attributfiltern ist das, was ich gesucht habe.

0 Stimmen

Der Regex-Selektor von @padolsey funktioniert hervorragend. Hier ist ein Beispiel, bei dem man damit über Text-, Datei- und Checkbox-Eingabefelder oder Textareas iterieren kann: $j('input:regex(type, text|file|checkbox),textarea').each(function(index){ // ... });

0 Stimmen

@Xenph Erlaubt dieser Filter den Rückverweis auf übereinstimmende Daten innerhalb einer Rückruffunktion?

355voto

dnxit Punkte 6682

Diese können hilfreich sein.

Wenn Sie finden, dass durch Enthält dann wird es so aussehen

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

Wenn Sie durch Beginnt mit dann wird es so aussehen

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

Wenn Sie durch Endet mit dann wird es so aussehen

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

Wenn Sie Elemente auswählen möchten, die id ist keine gegebene Zeichenkette

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

Wenn Sie Elemente auswählen möchten, die name enthält ein bestimmtes Wort, das durch Leerzeichen getrennt ist

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

Wenn Sie Elemente auswählen möchten, die id ist gleich einer bestimmten Zeichenfolge oder beginnt mit dieser Zeichenfolge, gefolgt von einem Bindestrich

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

5 Stimmen

Tolle Antwort, aber id s, die Identifikatoren sind, darf kein Leerzeichen enthalten le ~= Beispiel sollte in etwas anderes geändert werden, wie class die eine durch Leerzeichen begrenzte Liste von Bezeichnern ist. Dinge wie class sind das, was die ~= Attributselektor vorgesehen war.

66voto

Nicolas Janel Punkte 2965

Wenn Sie mit regulären Ausdrücken nur testen wollen, ob ein Attribut mit einer bestimmten Zeichenfolge beginnt, können Sie die Funktion ^ JQuery-Selektor.

Wenn Sie z.B. nur div auswählen möchten, deren id mit "abc" beginnt, können Sie verwenden:

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

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

0 Stimmen

Dies funktioniert nicht bei Anforderungen, die Groß- und Kleinschreibung nicht berücksichtigen. Die Funktion .filter erfüllt diese Anforderungen besser.

3 Stimmen

Das war gut für mich, ich wollte nur sehen, ob es ein '__destroy' am Ende einer Eingabe-ID gibt, also habe ich *= wie diese: $("input[id*='__destroy'][value='true']")

25voto

Kamil Dąbrowski Punkte 1047
var test = $('#id').attr('value').match(/[^a-z0-9 ]+/);

Hier, bitte sehr!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X