Próbuję usunąć wszystko po znaku „?” w adresie URL przeglądarki, gdy dokument jest gotowy.
Oto, czego próbuję:
jQuery(document).ready(function($) {
var url = window.location.href;
url = url.split('?')[0];
});
Mogę to zrobić i zobaczyć, jak działa poniżej:
jQuery(document).ready(function($) {
var url = window.location.href;
alert(url.split('?')[0]);
});
javascript
jquery
Derek
źródło
źródło
.ready()
? Nie musisz czekać, aby przekierować na nowy adres URL lub po prostu używać go.pushState()
zgodnie z zaleceniami Joraid.Odpowiedzi:
TL; DR
1- Aby zmodyfikować aktualny adres URL i dodać / wstawić go (nowy zmodyfikowany adres URL) jako nowy wpis adresu URL do listy historii, użyj
pushState
:2- Aby zamienić aktualny adres URL bez dodawania go do wpisów historii, użyj
replaceState
:3- W zależności od logiki biznesowej ,
pushState
przyda się w takich przypadkach, jak:chcesz obsługiwać przycisk Wstecz w przeglądarce
chcesz utworzyć na nowy adres URL, add / insert / popchnąć nowy adres URL do historii zgłoszeń, i sprawiają, że aktualny adres URL
umożliwiając użytkownikom dodania zakładek do strony z tymi samymi parametrami (aby wyświetlić te same treści)
aby programowo uzyskać dostęp do danych za pośrednictwem
stateObj
następnie analizy z kotwicyJak zrozumiałem z twojego komentarza, chcesz wyczyścić swój adres URL bez ponownego przekierowywania.
Pamiętaj, że nie możesz zmienić całego adresu URL. Możesz po prostu zmienić to, co pojawia się po nazwie domeny. Oznacza to, że nie możesz zmienić,
www.example.com/
ale możesz zmienić to, co nastąpi później.com/
tło
Możemy użyć:
1- Metoda pushState (), jeśli chcesz dodać nowy zmodyfikowany adres URL do wpisów historii.
2- Metoda replaceState (), jeśli chcesz zaktualizować / zamienić bieżący wpis historii.
Kod
Aby to zrobić, w tym przykładzie użyję metody pushState (), która działa podobnie do następującego formatu:
Zapraszam do wymiany
pushState
zreplaceState
zależności od wymagań.Można zastąpić paramter
"object or string"
z{}
i"Title"
zdocument.title
tak ostateczna statment będzie:Wyniki
Poprzednie dwa wiersze kodu utworzą adres URL, taki jak:
Zostać:
Akcja
Teraz spróbujmy innego podejścia. Powiedz, że musisz zachować nazwę pliku. Nazwa pliku pojawia się po ostatnim
/
i przed ciągiem zapytania?
.Będzie:
Coś takiego sprawi, że będzie działać:
AKTUALIZACJA:
Dla fanów z jednym liniowcem wypróbuj to w konsoli / firebug, a adres URL tej strony ulegnie zmianie:
Adres URL tej strony zmieni się z:
Do
Uwaga: jak Samuel Liew wskazał w komentarzach poniżej, ta funkcja została wprowadzona tylko dla
HTML5
.Alternatywnym podejściem byłoby przekierowanie strony (ale utracisz ciąg zapytania `? ', Czy jest nadal potrzebny, czy dane zostały przetworzone?).
źródło
replaceState
Wydaje się, że lepiej pasuje, ale równieżpushState
będzie działać, dopóki nie zaczniesz klikać przycisków Wstecz i Dalej w przeglądarce i nie zdasz sobie sprawy, że istnieje powód, dla którego istnieją całe biblioteki do pracy z interfejsem History API.url.substring(url.lastIndexOf('/') + 1);
.url.split("?")[0]
dostanie część przed pierwszym znakiem zapytania, o co myślę, że OP. Pytanie OP brzmi: „Próbuję usunąć wszystko po znaku„? ”W adresie URL przeglądarki”.To wszystko jest mylące, nigdy nie chcesz dodawać do historii przeglądarki, chyba że chcesz przejść do innej strony w aplikacji z jedną stroną. Jeśli chcesz usunąć parametry bez zmiany strony, musisz użyć:
źródło
prosty sposób, działa na każdej stronie, wymaga HTML 5
źródło
Uważam, że najlepszą i najprostszą metodą jest:
źródło
jeśli mam specjalny tag na końcu mojego adresu URL, taki jak: http://domain.com/?tag=12345 Oto poniższy kod służący do usuwania tego tagu, gdy pojawia się w adresie URL:
Daje to pomysł usunięcia jednego lub więcej (lub wszystkich) parametrów z adresu URL
Z window.location.pathname w zasadzie otrzymujesz wszystko przed '?' w adresie URL.
źródło
Chciałem usunąć tylko jeden parametr
success
. Oto jak możesz to zrobić:To również pozostaje
#hash
.URLSearchParams
nie będzie działać w IE, ale pracuję nad Edge . Możesz użyć polyfill lub możesz użyć naiwnej funkcji pomocniczej do obsługi IE:Można tego użyć na przykład:
źródło
take_param
już to robić, ale można zrobićURLSearchParams
to samo, wykonując:history.replaceState(null, '', (params ? '?' + params : '') + location.hash)
. Albo jak chcesz.Lepsze rozwiązanie:
źródło
Żadne z tych rozwiązań naprawdę nie działało dla mnie, oto funkcja zgodna z IE11, która może również usunąć wiele parametrów:
źródło
źródło
Aby wyczyścić wszystkie parametry bez odświeżania strony ORAZ jeśli korzystasz z HTML5, możesz to zrobić:
history.pushState({}, '', 'index.html' ); //replace 'index.html' with whatever your page name is
Spowoduje to dodanie wpisu do historii przeglądarki. Możesz również rozważyć
replaceState
, czy nie chcesz dodać nowego wpisu i po prostu chcesz zastąpić stary wpis.źródło
W jquery użyj <
źródło
Oto jedna linijka ES6, która zachowuje skrót lokalizacji i nie zanieczyszcza historii przeglądarki za pomocą
replaceState
:źródło
location
akawindow.location
obiekt, więc funkcja ma dostęp do globalnych,location
ponieważl
reszta jest podstawową replaceState, podobnie jak we wszystkich innych odpowiedziach, łączy on nazwę ścieżki i hash (przykład.com/#hash) jako nowy adres URL. Mam nadzieję, że to strawne, jeśli nie, daj mi znać 😉window.history.replaceState({}, '', location.pathname + location.hash)
? ;)location
2 razy 😁 ale nie musisz przypisywać tego do zmiennej 😉 czy może to coś więcej Joey?