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.
javascript
window.location
fragment-identifier
Tom Lehman
sumber
sumber
Jawaban:
Pertanyaan awal:
atau
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 mengubahwindow.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.
sumber
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.
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:
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 gantipushState()
.sumber
(Terlalu banyak jawaban yang redundan dan ketinggalan jaman.) Solusi terbaik saat ini adalah:
sumber
history.pushState(null, null, ' ')
sebaliknya jika Anda ingin menyimpan sejarah.null
untukstate
dantitle
parameter pada akhirnya tidak.Sederhana dan elegan:
sumber
.
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
sumber
Ini akan menghapus hash trailing juga. mis .: http://test.com/123#abc -> http://test.com/123
sumber
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.
sumber
Anda dapat melakukannya seperti di bawah ini:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
sumber
sumber
letakkan kode ini di bagian kepala
sumber
sumber
Saya pikir, itu akan lebih aman
sumber
Coba yang berikut ini:
sumber
Berikut adalah solusi lain untuk mengubah lokasi menggunakan href dan menghapus hash tanpa menggulir.
Solusi ajaib dijelaskan di sini . Spesifikasi di sini .
CATATAN: API yang diusulkan sekarang merupakan bagian dari WhatWG HTML Living Standard
sumber
sumber
Anda dapat mengganti hash dengan null
sumber