Expressions régulières de sélecteur jQuery
-
06-07-2019 - |
Question
Je suis à la recherche de documentation sur l'utilisation d'expressions génériques ou régulières (vous ne savez pas exactement quelle est la terminologie) avec un sélecteur jQuery.
J'ai recherché cela moi-même, mais je suis incapable de trouver des informations sur la syntaxe et son utilisation. Est-ce que quelqu'un sait où se trouve la documentation pour la syntaxe?
EDIT: les filtres d’attributs vous permettent de sélectionner en fonction des modèles de valeur d’attribut.
La solution
James Padolsey a créé un excellent filtre permettant à regex d'être utilisé pour la sélection.
Disons que vous avez le div
suivant:
<div class="asdf">
Le filtre : regex
de Padolsey peut le sélectionner comme suit:
$("div:regex(class, .*sd.*)")
Vérifiez également la documentation officielle sur les sélecteurs .
Autres conseils
Vous pouvez utiliser la fonction filtre
pour en appliquer d'autres. correspondance complexe regex.
Voici un exemple qui correspondrait aux trois premiers divs:
$('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>
Cela peut être utile.
Si vous recherchez par contient , ce sera comme ceci
$("input[id*='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Si vous recherchez par Commence par , ce sera comme ceci
$("input[id^='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Si vous recherchez par termine par , ce sera comme ceci
$("input[id$='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Si vous souhaitez sélectionner des éléments pour lesquels id n'est pas une chaîne donnée
$("input[id!='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Si vous souhaitez sélectionner des éléments dont id contient un mot donné, délimités par des espaces
$("input[id~='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Si vous souhaitez sélectionner des éléments dont id est égal à une chaîne donnée ou commençant par cette chaîne suivie d'un trait d'union
$("input[id|='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Si votre utilisation de l'expression régulière est limitée pour vérifier si un attribut commence par une certaine chaîne, vous pouvez utiliser le sélecteur ^ jquery
Par exemple, si vous souhaitez uniquement sélectionner div avec l'id commençant par "abc", vous pouvez utiliser $ ("div [id ^ = 'abc']")
De nombreux sélecteurs très utiles pour éviter l'utilisation de regex peuvent être trouvés ici: http: // api. jquery.com/category/selectors/attribute-selectors/
var test = $('#id').attr('value').match(/[^a-z0-9 ]+/);
Voilà!
Les identifiants et les classes sont toujours des attributs. Vous pouvez donc leur appliquer un filtre d'attributs d'expression rationnelle si vous les sélectionnez en conséquence. Lire la suite ici: http://rosshawkins.net/archive /2011/10/14/jquery-wildcard-selectors-some-simple-examples.aspx
Ajouter une fonction 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);
Ensuite,
$('span').regex(/Sent/)
sélectionnera tous les éléments avec des correspondances de texte / Sent /.
$('span').regex(/tooltip.year/, $.fn.attr, ['class'])
sélectionnera tous les éléments de portée dont les classes correspondent /tooltip.year /.
$("input[name='option[colour]'] :checked ")
Si vous souhaitez uniquement sélectionner des éléments contenant une chaîne donnée, vous pouvez utiliser le sélecteur suivant:
$ (': contient (" chaîne de recherche ")')
Je ne fais que donner mon exemple en temps réel:
En javascript natif, j'ai utilisé l'extrait suivant pour rechercher les éléments dont l'identifiant commence par "select2-qownerName_select-result".
document.querySelectorAll ("[[id ^ = = select2-qownerName_select-result ']");
Lorsque nous sommes passés de javascript à jQuery, nous avons remplacé le fragment ci-dessus par le texte suivant, qui implique moins de modifications de code sans perturber la logique.
$ (" [id ^ = 'select2-qownerName_select-result'] ")