Saya memiliki URL seperti:, http://example.com#something
bagaimana cara menghapus #something
, tanpa menyebabkan halaman diperbarui?
Saya mencoba solusi berikut:
window.location.hash = '';
Namun, ini tidak menghapus simbol hash #
dari URL.
Saya memiliki URL seperti:, http://example.com#something
bagaimana cara menghapus #something
, tanpa menyebabkan halaman diperbarui?
Saya mencoba solusi berikut:
window.location.hash = '';
Namun, ini tidak menghapus simbol hash #
dari URL.
Jawaban:
Pertanyaan awal:
window.location.href.substr(0, window.location.href.indexOf('#'))
atau
window.location.href.split('#')[0]
keduanya akan mengembalikan URL tanpa hash atau apa pun setelahnya.
Sehubungan dengan hasil edit Anda:
Setiap perubahan window.location
akan memicu penyegaran halaman. Anda dapat mengubah window.location.hash
tanpa memicu penyegaran (meskipun jendela akan melompat jika hash Anda cocok dengan id di halaman), tetapi Anda tidak bisa menghilangkan tanda hash. Pilih yang lebih buruk ...
JAWABAN TERBARU
Jawaban yang tepat tentang bagaimana melakukannya tanpa mengorbankan (baik memuat ulang penuh atau meninggalkan tanda hash di sana) ada di sini . Meninggalkan jawaban ini di sini sehubungan dengan menjadi yang asli di 2009 sedangkan yang benar yang memanfaatkan API browser baru diberikan 1,5 tahun kemudian.
Memecahkan masalah ini jauh lebih mudah dijangkau saat ini. The HTML5 Sejarah API memungkinkan kita untuk memanipulasi bar lokasi untuk menampilkan URL apapun dalam domain saat ini.
function removeHash () {
history.pushState("", document.title, window.location.pathname
+ window.location.search);
}
Demo kerja: http://jsfiddle.net/AndyE/ycmPt/show/
Ini berfungsi di Chrome 9, Firefox 4, Safari 5, Opera 11.50 dan di IE 10. Untuk browser yang tidak didukung, Anda selalu bisa menulis skrip yang merendahkan anggun yang memanfaatkannya jika tersedia:
function removeHash () {
var scrollV, scrollH, loc = window.location;
if ("pushState" in history)
history.pushState("", document.title, loc.pathname + loc.search);
else {
// Prevent scrolling by storing the page's current scroll offset
scrollV = document.body.scrollTop;
scrollH = document.body.scrollLeft;
loc.hash = "";
// Restore the scroll offset, should be flicker free
document.body.scrollTop = scrollV;
document.body.scrollLeft = scrollH;
}
}
Jadi Anda dapat menyingkirkan simbol hash, hanya saja tidak di semua browser - belum.
Catatan: jika Anda ingin mengganti halaman saat ini dalam riwayat browser, gunakan replaceState()
sebagai ganti pushState()
.
(Terlalu banyak jawaban yang redundan dan ketinggalan jaman.) Solusi terbaik saat ini adalah:
history.replaceState(null, null, ' ');
history.pushState(null, null, ' ')
sebaliknya jika Anda ingin menyimpan sejarah.
null
untuk state
dan title
parameter pada akhirnya tidak.
Sederhana dan elegan:
history.replaceState({}, document.title, "."); // replace / with . to keep url
.
sebagai ganti /
. Menggunakan /
perubahan url ke jalur root.
history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
untuk use case saya.
history.replaceState(null, document.title, location.pathname + location.search);
Untuk menghapus hash, Anda dapat mencoba menggunakan fungsi ini
function remove_hash_from_url()
{
var uri = window.location.toString();
if (uri.indexOf("#") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("#"));
window.history.replaceState({}, document.title, clean_uri);
}
}
Ini akan menghapus hash trailing juga. mis .: http://test.com/123#abc -> http://test.com/123
if(window.history.pushState) {
window.history.pushState('', '/', window.location.pathname)
} else {
window.location.hash = '';
}
Bagaimana dengan yang berikut ini?
window.location.hash=' '
Harap dicatat bahwa saya menyetel hash ke satu ruang dan bukan string kosong.
Mengatur hash ke anchor yang tidak valid juga tidak menyebabkan penyegaran. Seperti,
window.location.hash='invalidtag'
Tapi, saya menemukan solusi di atas menyesatkan. Ini tampaknya menunjukkan bahwa ada jangkar pada posisi yang diberikan dengan nama yang diberikan meskipun tidak ada. Pada saat yang sama, menggunakan string kosong menyebabkan halaman berpindah ke atas yang terkadang tidak dapat diterima. Menggunakan spasi juga memastikan bahwa setiap kali URL disalin dan bookmark dan dikunjungi lagi, halaman biasanya akan di bagian atas dan ruang akan diabaikan.
Dan, hei, ini adalah jawaban pertama saya di StackOverflow. Semoga seseorang menemukan itu berguna dan cocok dengan standar komunitas.
const url = new URL(window.location);
url.hash = '';
history.replaceState(null, document.title, url);
<script type="text/javascript">
var uri = window.location.toString();
if (uri.indexOf("?") > 0) {
var clean_uri = uri.substring(0, uri.indexOf("?"));
window.history.replaceState({}, document.title, clean_uri);
}
</script>
letakkan kode ini di bagian kepala
function removeLocationHash(){
var noHashURL = window.location.href.replace(/#.*$/, '');
window.history.replaceState('', document.title, noHashURL)
}
window.addEventListener("load", function(){
removeLocationHash();
});
Saya pikir, itu akan lebih aman
if (window.history) {
window.history.pushState('', document.title, window.location.href.replace(window.location.hash, ''));
} else {
window.location.hash = '';
}
Coba yang berikut ini:
window.history.back(1);
Berikut adalah solusi lain untuk mengubah lokasi menggunakan href dan menghapus hash tanpa menggulir.
Solusi ajaib dijelaskan di sini . Spesifikasi di sini .
const hash = window.location.hash;
history.scrollRestoration = 'manual';
window.location.href = hash;
history.pushState('', document.title, window.location.pathname);
CATATAN: API yang diusulkan sekarang merupakan bagian dari WhatWG HTML Living Standard
$(window).on('hashchange', function (e) {
history.replaceState("", document.title, e.originalEvent.oldURL);
});
Anda dapat mengganti hash dengan null
var urlWithoutHash = document.location.href.replace(location.hash , "" );