2011-10-21 8 views
5

Próbuję napisać opis użytkownika dla serwisu YouTube, który zaznaczy wszystkie filmy na stronie na podstawie ich tytułów, które również są ustawiane jako atrybuty miniaturek "title".JQuery - Jak mogę napisać wybór znacznika "Attribute Contains" bez rozróżniania wielkości liter?

Poniższe działa dobrze, ale to jest wielkość liter:

var videoTitle = "the"; 

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

// stuff here 

}); 

Selektor powyżej będzie pasować do każdego wideo z „the” w tytule, ale nie „z” lub „”, na przykład.

Przeczytałem, że mogę użyć .filter(), aby jakoś to osiągnąć, ale nie jestem pewien jak to działa i nie mogłem znaleźć przykładu, który pasowałby do mojego scenariusza.

Próbowałem coś takiego, na podstawie przykładu znalazłem na StackOverflow, ale to nie działa:

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

// stuff here 

}); 

Odpowiedz

9

ten jest adaptacją post autorstwa Karla Swedburga na jQuery docs page dla "Attribute Contains Selector". Wykorzystuje regex i i wielkość liter ma znaczenie przełącznika wraz z funkcją 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)}); 

Nazwy filmów trzech „Star Wars” powinno być powiadamiani.

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

+0

dziękuję. Po tym, jak napisałem to pytanie, znajomy, który napisałem scenariusz, powiedział, że nie potrzebuje tego do rozróżniania wielkości liter i wziął scenariusz w taki sposób, w jaki go miałem. Mimo to przetestowałem to i działa świetnie, i jestem pewien, że kiedyś się przyda. Dzięki jeszcze raz. – vertigoelectric

+0

Czy istnieje sposób na wykonanie tego samego filtru tylko za pomocą niestandardowego atrybutu 'data-'? – bukka

0

pomocą opcji filtrowania, wystarczy zmienić funkcję return this.title.toLowerCase().indexOf(videoTitle) >= 0 inaczej to tylko dopasowywanie "the", a nie rzeczy, które zawierają "the" (jeśli tego chcesz).
EDIT: Ponadto, nie jestem pewien, czy this.title jest ok, ale może jeśli powyższe nie zadziała, spróbuj $ (this) .attr ('title')

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

To powinno działać:

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

Przykład -

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