我的Web应用程序使用了许多<a href="#">Perform client script action</a>
anchor 链接,这些链接用于脚本编写(这是我10年前从Dreamweaver用户那一天起就养成的习惯),现在我开始怀疑这是否必要。
我实际上不知道为什么首先要使用<a href="#">
-我的猜测是href
属性的存在会导致浏览器应用:link
和:visited
伪类,从而简化了样式表。它还使浏览器隐式地应用cursor: pointer
属性,这可能是理想的。
我使用jQuery(在MooTools短暂停留之后),并且链接在没有href="#"
属性和值的情况下也能正常工作,因此我应该完全删除该属性并修改样式表以补偿:link
伪类的删除吗?还有什么我可能会缺少的东西,href属性注入(inject)了 anchor 元素的任何半文档伏都教?
最佳答案
<a>
代表 anchor
如果您在[href]
元素上包括<a>
属性,则它是指向某个位置的 anchor ,这意味着您可以转到新页面,即当前页面的特定片段(因此#
被称为片段标识符),或新页面的特定片段。
历史上没有<a>
属性的[href]
元素被分配了[name]
属性,该属性可用作片段标识符的目的地。浏览器后来增加了对链接到任何项目的[id]
属性的支持,现在这是链接到文档片段的首选方法。
这对于独立的<a>
元素意味着什么?a[href]
元素是一个链接(这就是为什么它们与CSS中的:link
匹配的原因)。链接是可单击的。 An a
element without the [href]
attribute is otherwise just a placeholder for where a link might otherwise have been placed,并且不可单击,它们也不是页面的Tab键顺序。
如果您希望链接对于可访问性(WAI-ARIA)很重要,可以通过键盘导航,则需要执行以下操作之一:
<button type="button">
[href]
属性[tabindex="0"]
以及[role="button"]
或[role="link"]
(以及可能的某些样式)之一有关
[role]
属性的更多信息,可以在the Roles Model section的WAI-ARIA docs中找到。更改标记
如果没有理由保留
[href]
属性,则不妨使用<button>
元素:<button type="button">
^^^^^^^^^^^^^
[type]
属性用于使元素成为通用按钮,否则<button>
将默认为[type="submit"]
,由于可能触发表单提交,因此可能不希望使用。如果您不能使用
<button>
(通常在内部标记必须包含<div>
时发生),则可以使用以下方法伪造<button>
:<div role="button" tabindex="0">Some clickable text</div>
您需要侦听
keypress
事件,并为Enter和Space触发click
事件。保持标记
如果要保留
<a>
元素及其[href]
属性,则可以使用许多选项来选择其值。真正的联系
前任。
<a href="/some/location/for/users/without/js">
<a href="#document-fragment">
如果您需要为禁用JS的用户提供支持,也可以将他们定向到执行没有JS的等效功能的页面。
通过扩展,这还包括提供文档片段链接以链接到同一文档中的内容。例如,可切换区域可以标记为:
<a href="#more" class="toggleable">Read More</a>
<div id="more">Lorem ipsum dolor sit amet</div>
这样,使用JS可以折叠和扩展该区域,而如果没有JS,则该链接会将用户带到页面上的适当内容。
一个过时的href
前任。
<a href="#">
<a href="javascript:void(0)">
<a href="about:blank">
如果要防止JavaScript中的默认行为在幕后运行,并且不支持禁用JS的用户,则可以使用“dud” href值将链接保持在制表顺序中,并自动启用Enter触发
click
事件。您应该添加[role="button"]
,因为在语义上<a>
标记不再用作链接,而是用作按钮。<a href="#" role="button">Some clickable text</a>
关于javascript - <a>没有href =“#”的脚本链接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11144653/