<a> script links without href=&#34;#&#34;</a>

时间:2012-06-21 18:38:51

标签: javascript html

我的网络应用程序使用了许多用于编写脚本的<a href="#">Perform client script action</a>锚点链接(这是我10年前作为Dreamweaver用户使用的习惯)现在我开始质疑如果有必要的话。

我实际上并不知道为什么<a href="#">首先被使用 - 我的猜测是href属性的存在会导致浏览器应用:link和{{1} psuedo-classes简化了样式表。它还使浏览器隐式应用可能需要的:visited属性。

我使用jQuery(在与MooTools短暂合作之后)并且链接也可以在没有cursor: pointer属性和值的情况下工作,因此我应该完全删除该属性并修改我的样式表以补偿删除href="#" psuedo-class?还有什么我可能会遗漏的,href属性嵌入锚元素的任何一种半文档的伏都教?

7 个答案:

答案 0 :(得分:77)

<a>代表锚

如果在[href]元素上包含<a>属性,则它是指向某个位置的锚点,这意味着您可以转到新页面,即当前页面的特定片段(因此#被称为片段标识符),或新页面的特定片段。

历史上,没有<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,不可点击,也不在页面的标签顺序中。

如果您希望您的链接可以通过键盘导航,这对于辅助功能非常重要(WAI-ARIA),则需要执行以下操作之一:

  • 将元素更改为<button type="button">
  • 保留[href]属性
  • 添加[tabindex="0"]以及[role="button"][role="link"]之一(可能还有一些样式)

有关[role]属性的更多信息,请参见the Roles Model sectionWAI-ARIA docs

更改标记

如果您没有理由保留[href]属性,那么您可能也在使用<button>元素:

<button type="button">
        ^^^^^^^^^^^^^

[type]属性用于将元素设为通用按钮,否则<button>将默认为[type="submit"],这可能不合适,因为它可能会触发表单提交。

如果您不能使用<button>(通常在内部标记必须包含<div>时发生),您可以伪造<button>使用:

<div role="button" tabindex="0">Some clickable text</div>

您需要为 Enter Space 监听keypress个事件并触发click个事件。

保持标记

如果您保留<a>元素及其[href]属性,则其值有多个选项。

一个真正的链接

E.x。

  • <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,链接将使用户访问页面上的相应内容。

一个dud href

E.x。

  • <a href="#">
  • <a href="javascript:void(0)">
  • <a href="about:blank">

如果您在JavaScript中阻止了幕后的默认行为,并且您不支持禁用JS的用户,则可以使用“dud”href值来保持链接处于Tab键顺序并自动启用输入以触发click事件。您添加[role="button"],因为语义上<a>标记不再用作链接,而是用作按钮。

<a href="#" role="button">Some clickable text</a>

答案 1 :(得分:8)

就我个人而言,我更喜欢使用href="javascript:void(null);",为浏览器提供一个不会破坏任何其他哈希值的href。

我注意到关于无href链接的唯一区别是浏览器默认情况下不会为它们加下划线,所以只需添加该样式即可,你应该很好。

答案 2 :(得分:0)

我正在为React实现HTML,CSS,JS模板,这一行代码非常适合我:

<a href={() => false}> Link </a>

答案 3 :(得分:0)

React js也有同样的问题。

Line 273:  Links must not point to "#". Use a more descriptive href or use a button instead  jsx-a11y/href-no-hash

像这样,以消除我曾经使用过的错误

之前:

 <a 
      href="#"
      className="banner-signup signup-btn envy-font-sans-bold"
      onClick={(e) => this.gonext()}
    >
     NEXT
    </a>

在href =“#”位置上使用href =“#/”

 <a 
      href="#/"
      className="banner-signup signup-btn envy-font-sans-bold"
      onClick={(e) => this.gonext()}
    >
     NEXT
    </a>

答案 4 :(得分:-1)

不知道任何伏都教,但如果你在页面上有很多链接并且你拉了href,那么你将不得不添加一个类名,以便为每个提供蓝色和下划线。换句话说,为什么当浏览器全部准备好照顾或它时,引入更多的工作。所以简而言之,坚持你所知道的,我怀疑如果你删除了href页面将无法验证http://validator.w3.org/

答案 5 :(得分:-1)

我有这个问题,特别需要手风琴标题是<a>,以便它可以被标签但不能点击。如果没有href,这将无法工作,所以我在&#34;#&#34;之后放了一个id的文本。在href,它似乎工作。它使链接可用于标签,但无法点击。

<a href="#${accordionGroup.id}"> Title </a>

输出为:

<a href="#acc234923"> Title </a>

答案 6 :(得分:-1)

在html中使用

<a id="calendar" href="javascript:void(0)">
        <div class="icon-w">
          <div class="fa fa-calendar"></div>
        </div>
     <span>Calendar</span>
</a>