2025-01-24 07:00:03

空href是否有效?

我们的一个web开发人员使用下面的html作为样式化下拉列表的占位符。

<a href="" class="arrow"></a>

这被认为是锚标签有效吗?

由于没有href值,它在我们的一些链接检查器报告中显示为broken。


当前回答

它是有效的。

然而,标准的做法是使用href="#",有时也使用href="javascript:;"。

其他回答

它是有效的。

然而,标准的做法是使用href="#",有时也使用href="javascript:;"。

虽然这个问题已经被回答了(tl;dr:是的,空的href值是有效的),但现有的答案都没有引用相关的规范。

空字符串不能是URI。然而,href属性不仅将URI作为值,还将URI引用作为值。空字符串可以是URI引用。

HTML 4.01

HTML 4.01使用RFC 2396,在4.2节中提到。同一文档引用(粗体强调):

不包含URI的URI引用是对当前文档的引用。换句话说,文档中的空URI引用被解释为对该文档开头的引用,而仅包含片段标识符的引用则是对该文档已标识的片段的引用。

RFC 2396已被RFC 3986(目前是IETF的URI标准)所淘汰,它本质上说的是一样的。

HTML5

HTML5使用(有效URL可能被空格包围→有效URL) W3C的URL规范,该规范已被终止。应该使用WHATWG的URL标准(参见最后一节)。

HTML 5.1

HTML 5.1使用WHATWG的URL标准(有效URL可能被空格包围→有效URL)(见下一节)。

WHATWG HTML

WHATWG的HTML使用了WHATWG的URL标准中有效URL字符串的定义(有效URL可能被空格环绕),它说它可以是一个带片段的相对URL字符串,它必须至少是一个相对URL字符串,它可以是一个路径相对方案少URL字符串,它是一个路径相对URL字符串,不以方案字符串开头,后面跟着:,它的定义说(粗体强调我的):

路径相对url字符串必须是0个或多个url路径段字符串,彼此用U+002F(/)隔开,并且不能以U+002F(/)开头。

正如其他人所说,这是有道理的。

但每种方法都有一些缺点:

Href ="#"在浏览器历史记录中添加了一个额外的条目(这在后退按钮时很烦人)。

Href =""重新加载页面

Href ="javascript:;"似乎没有任何问题(除了看起来乱七八糟和毫无意义)-有人知道吗?

虽然不包含href可能是完全有效的HTML,特别是使用onclick处理程序时,但有一些事情需要考虑:如果没有tabindex值设置,它将不能用于键盘聚焦。此外,使用Internet Explorer的屏幕阅读器软件将无法访问它,因为IE将通过可访问性接口报告任何没有href属性的锚元素为不可聚焦的,无论tabindex是否已设置。

因此,虽然以下说法可能完全正确:

<a class="arrow">Link content</a>

显式地添加一个null-effect href属性要好得多

<a href="javascript:void(0);" class="arrow">Link content</a>

为了完全支持所有用户,如果使用带有CSS的类来呈现图像,还应该包括一些文本内容,例如title属性,以提供对正在发生的事情的文本描述。

<a href="javascript:void(0);" class="arrow" title="Go to linked content">Link content</a>

这是有效的 就像upcreek说的那样 每种方法都有一些缺点。

如果你通过标签调用ajax 像这样保留href=""将保持页面重新加载 ajax代码永远不会被调用…

我有个想法,可以分享一下