2011-10-21 22 views
5

Estoy intentando escribir un UserScript para YouTube que seleccionará todos los videos en una página según sus títulos, que también se configuran como el atributo 'title' de las imágenes en miniatura.JQuery: ¿cómo puedo escribir un selector 'Contiene contenido' que no distingue entre mayúsculas y minúsculas?

Los siguientes funciona bien, pero es sensible a mayúsculas:

var videoTitle = "the"; 

$('img[title*="'+videoTitle+'"]').each(function() { 

// stuff here 

}); 

El selector anterior coincidirá con cualquier video con "the" en el título, pero no "el" o "la", por ejemplo.

He leído que podría usar .filter() para lograr esto de alguna manera, pero no estoy seguro de cómo funciona eso, y no pude encontrar un ejemplo que se ajuste a mi escenario con éxito.

he intentado algo como esto, en base a un ejemplo que encontré en StackOverflow, pero no funciona:

$('img[title]').filter(function(){return this.title.toLowerCase() == videoTitle}).each(function() { 

// stuff here 

}); 

Respuesta

9

Esta es una adaptación de una publicación de Karl Swedburg en jQuery docs page para los 'Atributos contiene el selector'. Se utiliza una expresión regular y el interruptor insensibles i caso junto con la función filter -

<img title="Star Wars"/> 
<img title="Star Wars 2"/> 
<img title="Star Wars 3"/> 
<img title="Back To The Future"/> 

var videoTitle = "star wars"; 
var re = RegExp(videoTitle ,"i"); 
$('img[title]').filter(function() { 
    return re.test(this.title); 
}).each(function() {alert(this.title)}); 

Los nombres de los tres películas de Star Wars '' debe ser alertado.

Demo - http://jsfiddle.net/FKBTx/3

+0

Gracias. Después de publicar esta pregunta, el amigo para quien escribí el guión dijo que no necesita que sea insensible a las mayúsculas y tomó el guión como yo lo tenía. Aún así, probé esto y funciona muy bien, y estoy seguro de que será útil en algún momento. Gracias de nuevo. – vertigoelectric

+0

¿Hay alguna forma de preformar el mismo filtro solo con un atributo 'data-' personalizado? – bukka

0

utilizando la opción de filtro, basta con cambiar la función a return this.title.toLowerCase().indexOf(videoTitle) >= 0 de lo contrario es solo coincide con 'el', no con cosas que contienen 'el' (si eso es lo que desea).
EDIT: Además, no estoy seguro si this.title está bien, pero tal vez si lo anterior no funciona, intente $ (this) .attr ('titulo')

0
$('img').filter(function (index) { return this.title.toLowerCase() === videoTitle; }) 
0

Esto debería funcionar:

var videoTitle = "bla"; 
$('img').filter(function() { 
    return $(this).attr('title').toLowerCase() == videoTitle; 
}).each(function() { 
    // do something 
}); 
1

Ejemplo -

$('img').filter(function(){ 
    return this.title.match(RegExp(videoTitle ,"i")) 
}).each(function(){ 
     alert(this.title); 
}) 
Cuestiones relacionadas