2008-10-10 34 views
492

Estoy buscando documentación sobre el uso de comodines o expresiones regulares (no estoy seguro de la terminología exacta) con un selector jQuery.Expresiones regulares del selector jQuery

He buscado esto por mí mismo pero no he podido encontrar información sobre la sintaxis y cómo usarlo. ¿Alguien sabe dónde está la documentación de la sintaxis?

EDITAR: Los filtros de atributos le permiten seleccionar en función de los patrones de un valor de atributo.

+0

¿Qué tiene que ver con la respuesta actual? –

+11

Los comentarios para esta pregunta deben estar bloqueados para que nadie haga comentarios sin sentido como "es famoso" o "famoso" –

Respuesta

290

James Padolsey creó un wonderful filter que permite que se use regex para la selección.

Digamos que tiene la siguiente div:

<div class="asdf"> 

filtro de Padolsey :regex se puede seleccionar este modo:

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

También, comprobar el official documentation on selectors.

+2

Ok. He estado allí, pero realmente no sabía el nombre de lo que estaba buscando. He tenido otra mirada y el uso de filtros de atributos es lo que estaba buscando. –

+1

excelente recurso! – iamserious

+0

El selector de expresiones regulares de @padolsey funciona muy bien.Aquí hay un ejemplo donde puede iterar sobre campos de entrada de texto, archivo y casillas de verificación o áreas de texto con él: $ j ('input: regex (tipo, texto | archivo | casilla de verificación), textarea'). Each (function (index) { // ... }); –

642

Puede usar la función filter para aplicar la correspondencia de expresiones regulares más complicada. He aquí un ejemplo que acaba de coincidir con los primeros tres divs (demostración en vivo 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 para una solución directa que no requiere una biblioteca/complemento adicional. – maerics

+30

Llegué 3 años tarde, pero solo estaba buscando comodines jQuery y encontré esto increíblemente útil. Odio cargar cientos de bibliotecas cuando puede evitarse. Esa es la razón por la que en un principio utilicé jQuery, fue incorporar toda la funcionalidad que podría desear en unas pocas funciones simples y potentes. – stevendesu

+2

@stevendesu: Y otros 3 años más tarde, también decidí seguir con esta respuesta en lugar de hinchar jQuery con más selectores. –

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

Aquí tienes!

38

Si el uso de expresiones regulares se limita a comprobar si un comienzo attribut con una determinada cadena, puede utilizar el selector^jQuery

Por ejemplo si su solo quiere seleccionar div con id comenzando con "abc" , puede utilizar $("div[id^='abc']")

Una gran cantidad de selectores muy útiles para evitar el uso de expresiones regulares se pueden encontrar aquí: http://api.jquery.com/category/selectors/attribute-selectors/

+0

esto no funcionará para los requisitos insensibles a las mayúsculas y minúsculas. La función .filter se ajusta mejor a esas necesidades. – brainondev

+0

esto fue bueno para mí, solo quería ver si había un '__destroy' al final de una identificación de entrada, así que usé '* =' de esta manera: '$ (" entrada [id * = '__ destroy'] [ value = 'true'] ")' – ryan2johnson9

183

Estos pueden ser útiles.

Si usted está encontrando por Contiene entonces va a ser como esto

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

Si usted está encontrando por Empieza con entonces va a ser como esto

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

Si estás buscando por Termina con, entonces será así

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

Si desea seleccionar elementos que ID no es una cadena dada

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

Si desea seleccionar elementos que ID contiene una palabra dada, delimitadas por espacios

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

Si desea seleccionar elementos que id es igual a una cadena dada o comenzando con esa cadena seguido de un guion

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

Gran respuesta, pero 'id's, siendo identificadores, [no puede contener un espacio] (https://www.w3.org/TR/CSS21/syndata.html#value -def-identifier), el ejemplo '~ =' debe cambiarse a otra cosa, como 'clase', que es una lista de identificadores delimitada por espacios en blanco. Cosas como 'clase' son para lo que se diseñó el selector de atributo' ~ = '. –

5

Añadir una función 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); 

Entonces,

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

seleccionará todos los elementos span con el texto coincide// Enviado.

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

seleccionará todos los elementos de tramo con sus clases coinciden /tooltip.year/.

0

Si lo que desea es seleccionar los elementos que contienen dado el cordón, puede utilizar el selector siguiente:

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

0

sólo estoy dando mi ejemplo real de tiempo:

en JavaScript nativo Solía El siguiente fragmento para encontrar los elementos con los identificadores comienza con "select2-qownerName_select-result".

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

Cuando pasamos de la javascript para jQuery hemos reemplazado por encima de fragmento con la siguiente que implica menos cambios de código sin alterar la lógica.

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