锚点href中的唯一哈希?

时间:2011-07-04 14:02:31

标签: javascript html

在我工作的项目中,我最近从开发后端(即非Web)服务器转向与Web相关的事物。在HTML代码中,我发现了以下所有内容:

<a href='#'>some link</a>

然后,某些JS附加到click元素的<a>事件。

这个唯一的哈希值是否有任何特殊含义?我了解href='#some_id'如何告诉浏览器滚动到ID = some_id的元素。但href='#'不起作用,对吧? 如果只是创建一个可点击的文本,为什么不简单地使用<span>

5 个答案:

答案 0 :(得分:16)

完全。你在这里看到的是某种糟糕的设计(尽管使用href="#")是很常见的。

如果不阻止默认操作,它实际上会跳到页面顶部。

更好的是

  • 使用<button>并相应地设置样式(甚至可能只通过JavaScript插入)
  • 或让链接指向某个真实资源(在服务器端触发某些操作)并附加JavaScript事件处理程序以在客户端上执行此(或类似)操作并阻止关注链接(关键字:{{3 }})。

这还取决于该网站是否可以使用禁用的JavaScript运行。如果是,那么这样的链接(但也是一个按钮)将不起作用。

但无论如何,从语义的角度来看,仅使用链接来获得“可点击”的内容是错误的。

答案 1 :(得分:10)

自己链接到页面顶部的哈希。

这有时用于此目的 - 即“返回顶部”链接,但更典型的是这种链接与Javascript单击结合使用,甚至返回false,从而否定href的操作

在这种情况下,出于以下原因使用它:

  • <a>标签可能在语义上是正确的 - 即要点击的项目充当链接;即加载更多内容,或打开弹出窗口等,即使它使用Javascript的功能。

  • 使用<a>标记也表示该元素的样式与网站上其他<a>标记的样式相同。这包括:hover效果样式等。请注意,IE6仅支持:hover元素上的<a>,而不支持任何其他内容,这意味着如果该网站设计为在IE6中工作或仍需要支持它,那么你不能用其他标签复制这个功能。这是在过去使用<a>标记用于此功能的一个非常好的理由,即使它在语义上不合适。这些天来,它不是一个问题。即使在现代浏览器中,如果您希望它们与其他链接看起来相同,那么对这些项目使用<a>对于减少复制的样式表仍然很有用。链接还有一些其他特殊功能,可能难以与其他元素一起复制,例如在选项卡索引序列​​中等。

  • HTML要求<a>标记具有href属性,以便将元素呈现为链接,因此哈希将用作此值的最小值。此外,在href属性中使用哈希表示如果用户关闭Javascript或开发人员忘记return false;,该链接不会导致任何令人讨厌的意外后果。相比之下,拥有一个空字符串会导致它重新加载页面,如果你刚刚运行一些javascript,这不太可能是你想要的。然而,将链接指向有效的URL也是很常见的,如果Javascript被关闭,它将被运行;这是为您的网站提供后备机制的好方法。但这并不总是合适的,显然不是这里的意图。

鉴于该项目只是在Javascript中触发点击事件,因此没有理由不为此使用任何其他元素。您可以非常轻松地使用<span>(甚至更好,<button>),但上述各点应该表明使用<a>代码没有任何问题。

希望有所帮助。

答案 2 :(得分:2)

  

这个唯一的哈希值是否有任何特殊含义?

它链接到页面顶部

  

为什么不简单地使用<span>

  • 它不会处于焦点顺序
  • 它不会采用应该点击的内容的默认样式

<button>优于跨度。事情built on top of a server side alternative 最好。

答案 3 :(得分:0)

因为您希望浏览器将此链接设置为与所有其他链接相同,并且无需指定(例如,使用class)“您知道,我希望它看起来像链接,即使它是技术上不是“。这对可维护性来说真的不好。

答案 4 :(得分:0)

由于:

  • 为您完成样式;
  • 该链接在语义上仍然是一个链接,即使它以无操作href开始。

修辞问题:你能否解释为什么你认为spana更适合链接?

附录:类似button或其他动态元素的内容可能更适合此处,但需要非span的文字和假装这是一个链接更糟