2012-01-10 25 views
13

Niech mówi mam:Jak uzyskać nazwę obrazu za pomocą jQuery?

<img src='static/images/banner/blue.jpg' /> 

użyciu jQuery, w jaki sposób mogę uzyskać dane blue? Jeśli mam użyć $('img').attr('src'), mogę pobrać cały URI W takim razie, jaki jest najlepszy sposób na usunięcie rozszerzenia i całej ścieżki?

Odpowiedz

22

Jest tu kilka elementów - pliki lokalne mogą używać innego ukośnika ("\") w nazwie ścieżki, a niektóre nazwy plików mogą zawierać hash lub szukane ogony lub nie mieć rozszerzenia.

String.prototype.filename=function(extension){ 
    var s= this.replace(/\\/g, '/'); 
    s= s.substring(s.lastIndexOf('/')+ 1); 
    return extension? s.replace(/[?#].+$/, ''): s.split('.')[0]; 
} 

console.log($('img').attr('src').filename()); 
9

Regex będzie twoim najlepszym przyjacielem tutaj ...

var filename = fullUri.replace(/^.*?([^\/]+)\..+?$/, '$1');

+0

@ RokoC.Buljan Dzięki, ustaloną teraz. – KOGI

+0

Teraz jest idealny, po prostu zapomniałeś uciec '/', Powinno być '(/^.*?([ ^\/]+)\..+?$/, '$ 1');' –

6
var src = $('img').attr('src').split('/'); 
var file = src[src.length - 1]; 

Powinna działać

+2

wyraźnie zapomniałeś pozbyć się rozszerzenia ... –

1
var src= $('img').attr('src'); 

var name = src.match(/static\/images\/banner\/(.*)\.jpg/)[1]; 
7

Wystarczy podzielić ciąg:

var src = $('img').attr('src'); // "static/images/banner/blue.jpg" 
var tarr = src.split('/');  // ["static","images","banner","blue.jpg"] 
var file = tarr[tarr.length-1]; // "blue.jpg" 
var data = file.split('.')[0]; // "blue" 
+1

Tylko przykład, że ten przykład powróci np .: 'summer' z obrazu o nazwie' summer.2013.jpg' –

2
src = $('img').attr('src'); 
src_array = src.split('/'); 
src = src_array[src.length-1]; 
3

Say mamy:

<img src="path/to/awesome/image/foobar.jpg" /> 

Oto, co możemy zrobić, aby wyodrębnić nazwę pliku:

Array.prototype.filename = function() { 
    var tmp = this.split('/'); 
    return tmp[tmp.length-1].match(/(.*)\.[\w]+$/)[1]; 
}); 

$('img').attr('src').filename(); 

Wynik:

console.log(name); // foobar 
+0

** Nie sugerowałbym tego **: co w przypadku 'summer.2013.jpg' ?? nazwa pliku nie jest "letnia", ale "summer.2013" –

+0

@ RokoC.Buljan Stare pytanie jednak zaktualizowane! – daryl

Powiązane problemy