没有href属性的锚标记是否安全?


232

是否可以使用锚标签而不包含href属性,而是使用JavaScript click事件处理程序?因此,我将href完全省略,甚至不留空(href="")。


1
尽管onclick事件仍然触发?我想使用锚标记而不是span / div,因为它是在IE中支持CSS的唯一合理标记:hover
john

3
可以通过键盘访问和激活@Martin ANCHORS。常规SPAN元素不能。在这里看到:jsfiddle.net/simevidas/4DTxv/2
森那维达斯


2
在HTML5中,没有href属性的锚点是占位符超链接:dev.w3.org/html5/markup/a.html
Ignacio Lago

1
确定要不要按钮吗?这意味着制表符等有效,并且您可以根据需要将按钮设置为看起来像链接的样式。诚然,我不了解IE中的悬停功能。
robbie_c 13-10-23

Answers:


217

在HTML5中,使用a没有href属性的元素是有效的。它被认为是“占位符超链接”。

例:

<a>previous</a>

在w3c定位标记参考页上查找“占位符超链接”:https : //www.w3.org/TR/2016/REC-html51-20161101/textlevel-semantics.html#the-a-element

Wiki上也提到了它:https//www.w3.org/wiki/Elements/a

占位符链接用于您要使用锚元素但不希望其导航到任何地方的情况。这对于在导航菜单或面包屑轨迹中标记当前页面非常方便。(旧方法可能是使用span标签或锚标签以及名为“ active”或“ current”的类来设置其样式,并使用JavaScript取消导航。)

如果您想在运行时通过JavaScript动态设置链接的目的地,则占位符链接也很有用。您只需设置href属性的值,锚标记即可单击。

也可以看看:


3
“占位符链接”的定义是什么?
Gyum Fox 2014年

14
注意,如果没有hrefcursor: pointer风格不会被自动添加到元素。
路加福音

38

可以,但是同时会导致某些浏览器变慢。

http://webdesignfan.com/yslow-tutorial-part-2-of-3-reducing-server-calls/

我的建议是使用<a href="#"> </a>

如果您使用的是JQuery,请记住也要使用:

.click(function(event){
    event.preventDefault();
    // Click code here...
});

7
我不能使用href =“#”,因为我正在使用涉及更改哈希的ajax书签,该怎么办?
约翰

5
而不是使用javascript:void(0); 在href中,我使用javascript :; 它写得短些。
Ally

16
仅当您实际指定一个空的href属性时,性能惩罚才适用。问题指出根本没有href属性。
Pete B

18
实际上,根据该文章(这很有意义),潜在的性能损失仅适用于空的src属性。它没有说明有关空href属性的性能。
bergie3000 2013年

1
您好@Gunnar,该链接现在似乎消失了。您还有其他参考资料吗?
user31782'1

25

简短答案:不可以。

长答案:

首先,没有href属性,它将不会是链接。如果不是链接,则无法访问键盘(或呼吸开关或其他各种非基于指针的输入设备)(除非您使用的HTML 5功能tabindex不受普遍支持)。非常适合没有键盘访问权限的控件。

第二。当JavaScript无法运行时(因为从服务器加载速度太慢,Internet连接被断开(例如,正在行驶的火车上的移动信号),JS被关闭等),您应该有一个替代方案。

利用渐进增强不显眼的JS。


问题是,我希望我可以使用jQuery的“ click”方法将click事件附加到该事件上,当鼠标滑过该事件时,它也会像链接一样突出显示和加下划线。除了没有href的锚标记,没有CSS还能完成什么呢?(即按原样无需手动添加该基本交互,同时保留通过jQuery直接单击功能分配的简单性)。
Triynko

@Triynko-使用链接,但请正确执行。请参阅答案的最后一行。
昆汀

5
自从HTML4以来(至少),w3schools.com
tags / att_global_tabindex.asp

@technoTarek —是的,但是href是强制性的(除非它是一个命名锚,在这种情况下,tabindex没有意义)。使用tabindex向制表符顺序添加无法定位的元素是HTML 5的一项新创新。–
Quentin

4
这是完全错误的。我不能说您当时是否在引用旧的HTML规范,但是根据HTML5规范,具有a没有href属性的标记确实是完全有效的。
迈克尔

23

如果必须使用href来实现向后兼容,也可以使用

<a href="javascript:void(0)">link</a>

如果不想使用该属性,请使用#代替


1
我需要一个<a>标记,除了功能外,它的行为类似于所有链接。这对我有用。
Jad S

13

如果没有href属性,则可以使用该标签。与此处的许多答案相反,实际上,没有href时,创建锚的标准原因是有标准的。语义上,“一个”表示锚点或链接。如果将其用于遵循此含义的任何事情,那么您就可以了。

不带href的a标签的一种标准用法是创建命名链接。这样,您可以使用name = blah的锚点,以后可以使用href =#blah创建锚点以链接到当前页面的命名部分。但是,已弃用此方法,因为您也可以以相同的方式使用ID。例如,您可以使用带有id = header的header标记,以后可以使用指向href =#header的锚点。

但是,我的观点不是建议使用name属性。仅提供一个不需要用href的用例,并因此说明为什么不需要它。


2
我认为问题试图提出的问题以及其他答案正在解决的问题是,是否可以安全地省略用作交互元素(即链接)href<a>元素的属性。正如您所提到的,没有属性就很简单……不是链接,只是锚,这完全是另一回事。href
BoltClock

1
是的,但是-只是为了强调-<a>标记在这些用例中仍然有效。
monokrome 16-4-25的

9

<a>从无href 的可访问性的角度来看,所有链接都应该是可制表的,因此,如果没有href,则添加tabindex ='0“。


1
或者,如果要执行页内操作而不是重定向,请使用按钮。
SimonDever

8

<a>使用多级菜单时,不带“ href” 的标签会很方便,您需要扩展下一级,但不希望该菜单标签成为活动链接。我从来没有用这种方式有任何问题。


1
您是否尝试过使用键盘访问该菜单?
2016年

我刚刚发现,在IE上,如果将鼠标悬停在某些链接上,而其中一个是没有href的锚,则带有下面URL的小弹出窗口将保留在那里,显示先前的URL,而不是消失。锚点不是可单击的,因此这不是一个大问题,但足以让我使用div。
安德鲁(Andrew)

1

在某些浏览器中,如果不提供href属性,则会遇到问题。我建议您编写如下代码:

<a href="#" onclick="yourcode();return false;">Link</a>

您可以使用自己的函数或逻辑替换yourcode(),但要记得添加return false; 最后的声明。


我正在将Backbone.js与Backbone.Router结合使用,并具有#索引页。对于我的某些导航栏链接,我不想触发一条路由,#如果您单独使用a href="#"它会发生什么。使用<a href="#" onclick="return false;"停止触发的路由,但是click事件仍然冒泡到我的处理程序中(该处理程序使用通过jQuery和Backbone.Radio挂钩的DOM事件)。谢谢@ shashwat13 :)
David Williamson
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.