Espressioni regolari del selettore jQuery
-
06-07-2019 - |
Domanda
Sto cercando la documentazione sull'uso di caratteri jolly o espressioni regolari (non sono sicuro della terminologia esatta) con un selettore jQuery.
Ho cercato questo da solo, ma non sono stato in grado di trovare informazioni sulla sintassi e su come usarla. Qualcuno sa dove si trova la documentazione per la sintassi?
EDIT: i filtri degli attributi ti consentono di selezionare in base ai modelli di un valore di attributo.
Soluzione
James Padolsey ha creato un meraviglioso filtro che consente a regex di essere utilizzato per la selezione.
Supponi di avere il seguente div
:
<div class="asdf">
Il filtro : regex
di Padolsey può selezionarlo in questo modo:
$("div:regex(class, .*sd.*)")
Inoltre, controlla la documentazione ufficiale sui selettori .
Altri suggerimenti
Puoi utilizzare la funzione filter
per applicare altro complicata corrispondenza regex.
Ecco un esempio che corrisponderebbe ai primi tre 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>
Questi possono essere utili.
Se lo trovi in ?? Contiene , sarà così
$("input[id*='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Se lo trovi in ?? Inizia con , sarà così
$("input[id^='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Se lo trovi in ?? Termina con , sarà così
$("input[id$='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Se desideri selezionare elementi il ??cui ID non è una determinata stringa
$("input[id!='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Se desideri selezionare elementi il ??cui ID contiene una determinata parola, delimitato da spazi
$("input[id~='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Se desideri selezionare elementi il ??cui id è uguale a una determinata stringa o che inizia con quella stringa seguita da un trattino
$("input[id|='DiscountType']").each(function (i, el) {
//It'll be an array of elements
});
Se l'uso dell'espressione regolare è limitato per verificare se un attributo inizia con una determinata stringa, è possibile utilizzare il selettore ^ jquery
Ad esempio, se desideri selezionare solo div con id che inizia con " abc " ;, puoi usare $ (" div [id ^ = 'abc'] ")
Molti selettori molto utili per evitare l'uso del regex sono disponibili qui: http: // api. jquery.com/category/selectors/attribute-selectors/
var test = $('#id').attr('value').match(/[^a-z0-9 ]+/);
Ecco qua!
id e classi sono ancora attributi, quindi puoi applicare un filtro di attributi regexp se li selezioni di conseguenza. Leggi di più qui: http://rosshawkins.net/archive /2011/10/14/jquery-wildcard-selectors-some-simple-examples.aspx
Aggiungi una funzione 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);
Poi,
$('span').regex(/Sent/)
selezionerà tutti gli elementi span con corrispondenze di testo / Sent /.
$('span').regex(/tooltip.year/, $.fn.attr, ['class'])
selezionerà tutti gli elementi span con le loro classi corrispondenti a /tooltip.year/.
$("input[name='option[colour]'] :checked ")
Se vuoi solo selezionare elementi che contengono una determinata stringa, puoi usare il seguente selettore:
$ (': contiene (" stringa di ricerca ")')
Sto solo dando il mio esempio in tempo reale:
Nel javascript nativo ho usato il seguente frammento per trovare gli elementi con ID che iniziano con " select2-qownerName_select-result " ;.
document.querySelectorAll (" [id = ^ 'select2-qownerName_select-result'] ");
Quando siamo passati da javascript a jQuery abbiamo sostituito lo snippet sopra con il seguente che comporta meno modifiche al codice senza disturbare la logica.
$ (" [id = ^ 'select2-qownerName_select-risultato'] ")