There are various ways to create an empty link, but some options are more
appropriate than others. One of the most common debates about it is if one
should use href=""
, href="#"
or
href="javascript:void(0)"
.
Generally, you want to avoid href="javascript:void(0)"
, as it
will cause the browser to parse the value of the link URL, which is both
costly and unnecessary. It also introduces a potential XSS security
vulnerability, as javascript:
URLs violate Content Security
Policy (CSP).
With that out of the way, it’s clear that href=""
or
href="#"
should be preferred in most cases. One key
difference between the two is that href="#"
points to the top
of the page whereas href=""
points to the current page. This
can have unwanted side-effects, such as scrolling to the top of the page
or issues with link styling respectively. To prevent either one of them
from acting as links, you can use Event.preventDefault()
and
handle them appropriately using JavaScript.
Finally, when creating an empty link, one should always consider more
semantically appropriate alternatives, such as a
<button>
, <div>
or
<span>
tag. After all, a link should always behave like
a link and hijacking it with JavaScript or any other means is bound to run
into some accessibility problems sooner or later.