2013-06-07 13 views
8

Próbuję dodać przycisk "z powrotem do katalogu" u góry strony, który przekieruje użytkownika do tego samego adresu URL, ale bez nazwy pliku.Jak uzyskać część katalogu bieżącego adresu URL w JavaScript?

Na przykład naciśnięcie przycisku podczas oglądania URL

http://example.com/somedir/button.html

przekieruje Cię do

http://example.com/somedir/

Więc stworzyłem następujący kod:

<html> 
<body> 

<input type="button" 
value="back to dir" 
onclick="top.location=document.URL.replace(/[^\\]*$/, '')"> 

</body> 
</html> 

ale brakuje mi poprawnego kodu, który mógłby zgolić nazwę pliku z bieżącego adresu URL w document.URL

Czy ktoś ma dobry pomysł tutaj?

Oto link JSFiddle: http://jsfiddle.net/afarber/PERBY/

I wolałbym nie używać jQuery ten jeden raz.

Odpowiedz

15

Spróbuj document.URL.substr(0,document.URL.lastIndexOf('/'))

Będzie działać na pewno!

+0

Dzięki, to wygląda dobrze - wydarzenie lepsze niż moje regex (gdzie zrobiłem literówkę ...) –

+0

Nie ma za co, zagłosuj, jeśli działa dobrze, aby inni ludzie mogli odnieść z tego korzyści. –

+2

To nie działa, jeśli bieżący URL kończy się ukośnikiem, jak to często się zdarza. –

1
/* to avoid query parameters, use pathname instead of href */ 
var l = document.location.pathname.split('/'); 
l.pop(); 
console.log(document.location.origin + l.join('/')); 
+1

FYI: "document.location" jest przestarzałe, zamiast tego użyj 'window.location'. – Teemu

0

spróbuj wykonać następujące czynności, która uwzględnia zarówno gdy adres URL kończy się ukośnikiem, a kiedy nie:

var currUrl = document.URL, 
    newUrl; 
if (currUrl.charAt(currUrl.length - 1) === '/') { 
    newUrl = currUrl.slice(0, currUrl.lastIndexOf('/')); 
    newUrl = newUrl.slice(0, newUrl.lastIndexOf('/')) + '/'; 
} else { 
    newUrl = currUrl.slice(0, currUrl.lastIndexOf('/')) + '/'; 
} 
console.log(newUrl); 
2

To jedna wkładka współpracuje również:

document.URL.split('/').slice(0, -1).join('/') 
0

Następujące pobiera katalogi, w tym przypadku, w którym ostatnia postać jest ukośnikiem.

document.URL.replace(/\/[^/]+\/?$/, ''); 

To skutecznie stwierdza co następuje (zakładając, że można je znaleźć w tej kolejności)

  1. \/: Znajdź „/”
  2. [^/]+: Znajdź jeden lub więcej znaków po nim, że nie są "/"
  3. \/?: Znajdź opcjonalny "/" po tych znaku (ów)
  4. $: Znajdź koniec stri ng

Następnie usuń te przez '', więc zostawiamy tylko katalog.

Ponownie, zakłada się, że to prezentujący ukośnik oznaczający katalog i że nie jest to adres URL, w którym jedyne ukośniki znajdują się w zakresie http://.

Powiązane problemy