Apa itu jika tautan memiliki tanda pagar "#" di dalamnya

94

Saya telah memeriksa beberapa situs dan mereka memiliki tanda pagar (#) di url. Apa fungsinya?

 <a href="#" >Link name</a>
Lukas101
sumber

Jawaban:

106

Ini adalah "fragmen" atau "jangkar bernama". Anda dapat menggunakan untuk menautkan ke bagian dari dokumen. Biasanya saat Anda menautkan ke suatu halaman, browser membukanya di bagian atas halaman. Tapi Anda menautkan ke bagian setengah jalan, Anda dapat menggunakan fragmen untuk menautkan ke tajuk itu (atau apa pun).

Jika tidak ada <a name="whatever"/>tag di dalam halaman, maka browser hanya akan menautkan ke bagian atas halaman. Jika fragmen itu kosong, maka itu juga hanya akan ditautkan ke bagian atas halaman.

Untuk fragmen saja <a href="#">Link name</a> , itu hanya link ke bagian atas halaman saat ini .

Anda sering melihat tautan semacam itu digunakan bersama dengan javascript. HTML yang sesuai standar memerlukan hrefatribut, tetapi jika Anda berencana untuk menangani permintaan dengan javascript, "#" berfungsi sebagai placeholder yang wajar.

Dean Harding
sumber
1
+1 Meskipun istilah resminya adalah fragmen URL, bukan "referensi hash": w3.org/TR/WD-html40-970708/htmlweb.html#h-4.1.1
Jason Hall
Ya, saya mengubahnya menjadi "fragmen" dalam jawaban saya, karena itulah yang digunakan kebanyakan orang. Saya tidak pernah tahu itu memiliki nama "resmi" :)
Dean Harding
2
Mengapa browser memperlakukannya sebagai 'go to top of page': Secara teknis, Anda mengubah halaman. Setelah mengeklik tautan, Anda akan melihat bahwa # sebenarnya ditambahkan ke URL di bilah alamat, dan jika Anda mengeklik tombol kembali, itu akan menghapusnya lagi. Saya tidak akan mengatakan itu adalah tautan ke bagian dari dokumen, lebih banyak tautan ke suatu tempat di dalam dokumen. Jika tidak, pada dasarnya hal yang sama saya ketik ...
animuson
URI yang diakhiri dengan # diizinkan oleh sintaks umum dan dapat dianggap sebagai semacam fragmen kosong. Dalam jenis dokumen MIME seperti teks / html atau jenis XML apa pun, pengenal kosong yang cocok dengan konstruksi legal sintaksis ini tidak diizinkan. Browser web biasanya menampilkan bagian atas dokumen untuk fragmen kosong. - en.wikipedia.org/wiki/Fragment_identifier
IcyBrk
Juga oleh "Jika tidak ada representasi seperti itu, maka semantik fragmen dianggap tidak dikenal dan secara efektif tidak dibatasi". Dari rfc3986 ( tools.ietf.org/html/rfc3986#page-24 )
IcyBrk
23

... hanya untuk menambahkan beberapa tip berguna tambahan.

Anda dapat mengakses dan mengubahnya dengan document.location.hashdi JavaScript.

Ini bisa menunjuk ke jangkar bernama (misalnya <a name="top"></a>) atau ke elemen dengan id yang sesuai (misalnya <div id="top"></div>).

Melihatnya sendiri (mis. <a href="#" onclick="pop()">popup</a>) Umumnya berarti tautan digunakan untuk menjalankan JavaScript secara eksklusif. Ini praktik yang buruk.

Setiap aelemen harus memiliki hrefyang mengarah ke sumber daya yang valid. Jika salah satu tidak ada, pertimbangkan untuk menggunakan elemen lain, seperti button.

alex
sumber
1
Itu poin yang baik tentang itu bukan praktik yang terlalu baik ... tetapi hanya karena itu tidak baik tidak berarti Anda tidak akan menemukannya digunakan seperti itu di semua tempat :)
Dean Harding
1
@alex, jika itu praktik yang buruk, beri tahu kami praktik baik apa yang akan digunakan sebagai gantinya.
Ryan Lundy
@Kyralessa Itu tepat di paragraf berikutnya. Pokoknya sudah saya edit jadi semoga lebih jelas.
alex
2
@alex, mungkin salah satu alasan orang menggunakan tautan daripada tombol adalah karena mereka menginginkan tampilan tautan. Bagaimana dengan link ke halaman yang menjelaskan cara membuat tombol terlihat seperti link? Misalnya tes tombol HTML
Ryan Lundy
1
@alex, tidak lebih dari mengatakan bahwa menggunakan # pada tautan adalah praktik yang buruk. Semua OP bertanya apa yang dilakukannya.
Ryan Lundy
11

# menunjukkan tautan ke jangkar.

Saya rasa saya juga akan menyebutkan hal lain:

Menggunakan '#' sebagai href untuk tautan yang mengaktifkan JavaScript itu buruk karena menggulung halaman ke atas - yang mungkin bukan yang Anda inginkan. Sebagai gantinya, gunakan javascript:void(0).

Nathan Osman
sumber
+1 untuk menyebutkan bahwa mengeklik tautan ini memaksa laman untuk menggulir ke atas.
Chris Calo
4
Anda tidak lagi membutuhkan jangkar. Mulai HTML5 (dan mungkin HTML 4), elemen apa pun dengan tag <id> dapat ditargetkan oleh pengenal fragmen. Lihat dokumen HTML5: whatwg.org/specs/web-apps/current-work/multipage/…
Basil Bourque
2
Jangan gunakan javascript:void(0)keduanya - gunakan a buttonjika itu bukan tautan.
alex
11

Tanda pagar ( #) menunjukkan untuk mencari jangkar pada halaman. Misalnya, jika Anda memasukkan ini di suatu tempat di halaman:

<a name="foo"></a>

atau, baru-baru ini:

<div id="foo">*part of page*</div>

dan kemudian Anda mengklik link di halaman yang memiliki href #foo, itu akan menavigasi ke jangkar dengan nama atau divdengan id foo.

Namun, jika Anda hanya memiliki href #, ini akan mengarah ke bagian atas halaman.

ElectroBit
sumber
2

Tautan ini kembali ke halaman itu sendiri. Ini sering digunakan dengan tautan yang sebenarnya menjalankan beberapa JavaScript.


sumber