Saya memiliki beberapa kode jQuery / JavaScript yang ingin saya jalankan hanya ketika ada #
tautan anchor ( ) anchor di URL. Bagaimana Anda bisa memeriksa karakter ini menggunakan JavaScript? Saya perlu uji tangkap sederhana yang akan mendeteksi URL seperti ini:
example.com/page.html#anchor
example.com/page.html#anotheranchor
Pada dasarnya sesuatu seperti:
if (thereIsAHashInTheUrl) {
do this;
} else {
do this;
}
Jika ada yang bisa mengarahkan saya ke arah yang benar, itu akan sangat dihargai.
javascript
jquery
anchor
fragment-identifier
Philip Morton
sumber
sumber
.search
tersedia pada<a>
, bukan.query
. JQuery sampel:$("<a/>").attr({ "href": "http://www.somewhere.com/a/b/c.html?qs=1#fragmenttest" })[0]
..hash => "#fragmenttest"
dan.search
=?qs=1
. Dari sana, tanyakan pertanyaan ekstraksi querystring untuk mendapatkan sesuatu selain string.hashchange
acara tersebut dan bukanwindow.location.hash
. Meskipun yang terakhir tidak didukung oleh IE <8.sumber
Masukkan yang berikut ini:
sumber
Jika URI bukan lokasi dokumen, cuplikan ini akan melakukan apa yang Anda inginkan.
sumber
obj['0']
. Dalam JS ini benar:arr[0] === arr['0']
Oleh karena itu jika indeks / kunci tidak ada nilai yang dikembalikan tidak terdefinisi bukannya di luar batas. jsfiddle.net/web5me/Mw376Sudahkah Anda mencoba ini?
(Di mana
url
URL yang ingin Anda periksa, tentu saja.)sumber
Ini akan menyelesaikan masalah;)
sumber
akan mengembalikan pengidentifikasi hash
sumber
... atau ada pemilih jquery:
sumber
Inilah yang dapat Anda lakukan untuk secara berkala memeriksa perubahan hash, dan kemudian memanggil fungsi untuk memproses nilai hash.
sumber
setTimeout(checkHash, 400)
. Plus, browser modern memilikihashchange
acara sehingga Anda dapat melakukannyawindow.addEventListener('hashchange', function(){ … })
. Akhirnya, membocorkanhash
variabel global adalah praktik lain yang tidak direkomendasikan, bahkan untuk contoh.Kebanyakan orang mengetahui properti URL di document.location. Itu bagus jika Anda hanya tertarik pada halaman saat ini. Tetapi pertanyaannya adalah tentang bagaimana cara mengurai jangkar pada halaman, bukan halaman itu sendiri.
Apa yang kebanyakan orang lewatkan adalah bahwa properti URL yang sama juga tersedia untuk elemen jangkar:
sumber
sumber
sumber
Komentar Partridge dan Gareths di atas sangat bagus. Mereka pantas mendapat jawaban terpisah. Rupanya, hash dan properti pencarian tersedia di objek html Link apa saja:
Atau
Jika Anda memerlukan ini pada variabel string biasa dan kebetulan memiliki jQuery, ini seharusnya berfungsi:
(tapi mungkin sedikit berlebihan ..)
sumber
Melempar ini ke sini sebagai metode untuk mengabstraksi properti lokasi dari string mirip URI. Meskipun
window.location instanceof Location
benar, setiap upaya untuk memohonLocation
akan memberi tahu Anda bahwa itu adalah konstruktor ilegal. Anda masih bisa mendapatkan hal-hal sepertihash
,query
,protocol
dll dengan menetapkan string Anda sebagaihref
milik elemen DOM jangkar, yang kemudian akan berbagi semua properti alamat denganwindow.location
.Cara paling sederhana untuk melakukan ini adalah:
Untuk kenyamanan, saya menulis perpustakaan kecil yang memanfaatkan ini untuk mengganti
Location
konstruktor asli dengan yang akan mengambil string dan menghasilkanwindow.location
objek seperti: Location.jssumber
Biasanya klik lebih dulu daripada perubahan lokasi, jadi setelah klik adalah ide yang baik untuk mengaturTimeOut untuk mendapatkan pembaruan window.location.hash
atau Anda dapat mendengarkan lokasi dengan:
Saya menulis plugin jQuery yang melakukan sesuatu seperti apa yang ingin Anda lakukan.
Ini adalah jangkar router sederhana.
sumber
Berikut adalah fungsi sederhana yang mengembalikan
true
ataufalse
(memiliki / tidak memiliki tagar):Pengembalian
true
dalam hal ini.Berdasarkan komentar @ jon-skeet.
sumber
Ini adalah cara sederhana untuk menguji ini untuk URL halaman saat ini:
sumber
terkadang Anda mendapatkan string kueri lengkap seperti "#anchorlink? firstname = mark"
ini skrip saya untuk mendapatkan nilai hash:
sumber