为什么人们在标签中加上“#”作为href?

时间:2014-01-28 03:39:02

标签: html anchor

我经常在源代码中找到#

<li><a href="#"><i class="fa fa-cog"></i><b>Settings</b></a></li>

为什么不只是

<li><a><i class="fa fa-cog"></i><b>Settings</b></a></li>

修改 谢谢你们的答案。但是,是的,意识到这是一个重复的问题&gt;。遗憾

4 个答案:

答案 0 :(得分:6)

比你想知道更多关于锚点

a元素在HTML中有两个用途:

  • 这是,您可以链接到该
  • ;
  • 它可以是指向锚点,文档或任何其他URL的超链接。

如果你写:

  <a name="Chapter4">Chapter 4. The Counterpane</a>

...并将其发布在网页上的

位置
   http://example.com/dedicated/hawthorne.html

...然后任何人都可以使用以下网址链接到该特定的锚点

   http://example.com/dedicated/hawthorne.html#Chapter4

为此目的,URL中保留#符号:将锚点的名称与包含锚点的文档的URL分开。

正如您可能已经看到的那样,URL的结构有点像(简化了一点!),如下所示:

  (method) : // (host) / (path-to-document-on-host) # (anchor)

所以,例如。

  http   :// example.com / dedicated/hawthorne.html # Chapter4
  method     host          path-to-document           anchor

幸运的是,URL非常懒,如果省略它们的任何部分,它们将默认从当前文档中取出该部分。您甚至可以通过创建相对URL来省略文档路径的一部分。

一种类型的相对URL是关闭所有但片段。因此,在同一文档中,可能会有一个内容列表,其条目如下:

   <li> <a href="#Chapter4">Chapter 4. The Counterpane</a> </li>

这允许文档在任何地方“移动”,因为它的主机和路径将默认为它所在的位置。

更好的是,因为很明显目标锚点必须在同一个文档中,(几乎)每个Web浏览器(除了一些非常深奥和蹩脚的浏览器)都会简单地滚动(或多或少) finesse)到目标锚,没有(重新)加载文档。


现在,由于a可能是锚点,并且可能是超引用(“链接”),因此您必须使用Web浏览器的一个或另一个属性来了解您想要的行为。

简单写作

    <a> Foo. </a>

......含糊不清。它应该是锚吗?可能不是;没有名字!它应该是超参考吗?显然不是;没有参考!

现在,它已经(并且在某些浏览器中,可能仍然存在)JavaScript的某些属性(例如onClick)只保留给非常特定的元素。因此,为了在页面上创建一个可能会捕获这些事件的窗口小部件,必须使用支持它的元素。

事实上,超级引用(链接)元素碰巧支持了很多这些事件,即使在像Netscape 4.0这样非常古老而又胡思乱想的Web浏览器中,他们也不喜欢谈论段落和分区之类的事件

因此,创建链接变得相当普遍,然后隐藏它是一个链接的事实,只是为了捕获像click这样的JavaScript事件。

如前所述,URL对您省略其中的各个部分非常宽容;还有,像

这样的同一文件中的一个片段
 <a href="#some-anchor"> ... </a>

...还具有不(重新)加载文档的奖励属性。那么如果我们把它剥离成最近的形式会发生什么呢?

 href="#"

嗯,你有它。您在当前文档中引用了一个没有名称的锚点。由于那个锚不可能存在,所以发生的一切都是......没有。

(好吧,通常没什么。缺点是,浏览器是要滚动到文档的顶部,但是因为你试图将他们的click陷入JavaScript中 - 你是,不是'你呢?---你可能会在此之前取消导航事件。)


因此,href="#"链接的原因是:

  • 这种非常特殊的链接形式无效,但仍然可以作为有效的超级引用,因此您可以将JavaScript事件监听器附加到它,无论您的最终用户设法挖掘的古老网络浏览器多么糟糕达

另一个类似的噱头是使用href="javascript:void(0);"

href="#"与此之间的主要区别在于,如果您的用户未启用JavaScript,他们会看到不同的行为。

  • href="#"什么都不做;或者,可能会滚动到文档的头部,这可能会让他们想知道链接应该做什么。
  • href="javascript:void(0);"通常会弹出某种对话框,模仿它们来禁用它们的JavaScript,让它们烦恼,但可能让它们充分意识到它们错过了“某些东西”。

我认为哪一个你喜欢的是味道问题,尽管其中一个更容易打字。

PS: href="javascript:void(0);"(或类似)的另一个缺点是它无法复制为对当前文档的引用。例如,如果有人在href="#"上右键单击→“复制链接位置”,“在新选项卡中打开”等等(例如,在新选项卡中单击以打开),则浏览器通常会做一些有点理智的事情,并使用当前文档的位置。另一方面,在新标签中打开javascript:void(0)可能会让某人盯着空白的窗户,抓挠他们的头。

答案 1 :(得分:0)

它只是一个占位符,因为它不会在任何地方重定向。它主要用于开发

答案 2 :(得分:0)

标签用于显示链接。如果您没有提及 href 属性,则文本不会显示为链接...它显示为普通文本。因此,如果要将文本显示为链接,则必须使用mantion href属性。如果您不想要任何操作或重定向,那么您可以使用“#”作为href属性的值。

答案 3 :(得分:0)

这是一个很好的问题,也是我在开始时问自己的问题。 ahref#符号经常用作html表单中的占位符。我看到很多引导程序,以及我修改的一些.NET项目。基本上我已经看到它最常用来说“你可以链接到某个地方,但我没有任何逻辑可以在我当前的例子中链接它。”为你干杯,快乐发展!