2011-10-21 10 views
5

Sto provando a scrivere un codice utente per YouTube che selezionerà tutti i video su una pagina in base ai loro titoli, che sono anche impostati come attributo title delle immagini di anteprima.JQuery - Come posso scrivere un selettore "Attribute Contains" senza distinzione tra maiuscole e minuscole?

I seguenti funziona bene, ma è case sensitive:

var videoTitle = "the"; 

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

// stuff here 

}); 

Il selettore sopra corrisponderà qualsiasi video con "la" nel titolo, ma non "il" o "i", per esempio.

Ho letto che potrei usare lo .filter() per realizzare questo in qualche modo, ma non sono sicuro di come funzioni, e non sono riuscito a trovare un esempio adatto al mio scenario.

Ho provato qualcosa di simile, sulla base di un esempio che ho trovato su StackOverflow, ma non funziona:

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

// stuff here 

}); 

risposta

9

Questa è adattato da un post di Karl Swedburg su jQuery docs page per "Attributes Contains Selector". Esso utilizza una RegEx e l'interruttore insensibile i caso con la funzione 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)}); 

I nomi dei film dei tre 'Star Wars' devono essere avvertiti.

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

+0

Grazie. Dopo aver postato questa domanda, l'amico che ho scritto la sceneggiatura mi ha detto che non ha bisogno che sia insensibile alle maiuscole e alle minuscole e che abbia preso la sceneggiatura come l'avevo io. Tuttavia, ho provato questo e funziona benissimo, e sono sicuro che sarà utile a un certo punto. Grazie ancora. – vertigoelectric

+0

C'è un modo per preformare lo stesso filtro solo con un attributo 'data-' personalizzato? – bukka

0

utilizzando l'opzione di filtro, basta cambiare la funzione di return this.title.toLowerCase().indexOf(videoTitle) >= 0 altrimenti è solo facendo corrispondere 'il', non le cose che contengono 'il' (se è ciò che vuoi).
EDIT: Inoltre, non so se this.title è ok, ma forse se quanto sopra non funziona, provate $ (this) .attr ('title')

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

Questo dovrebbe funzionare:

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

Esempio -

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