【问题标题】:Understanding <a href="#!"了解 <a href="#!"
【发布时间】:2016-06-05 09:55:50
【问题描述】:

我正在寻找一种方法来防止在单击href 属性内带有# 的链接后被带到页面顶部:

<a href="#" onclick="foobar()">click me</a>

然后我遇到了这个简单的解决方案,将# 切换为#!

<a href="#!" onclick="foobar()">click me</a>

使用 jQuery 可以在线获得各种其他解决方案,例如:

$('.service').click(function(e) {
    e.preventDefault();
});

我最终最喜欢#!,因为它非常干净但我无法在网上任何地方找到任何文档,了解在代码行中插入! 时实际发生的情况.

问题:

#! 究竟是什么导致了 html 代码的作用?这是防止将用户带到页面顶部的默认操作的好方法,还是由于其他原因这种方法不好?我担心的是它可能是一种与某些浏览器不兼容的hacky方法。

【问题讨论】:

标签: javascript html css


【解决方案1】:

#! 究竟是什么导致了 html 代码的行为?

它告诉浏览器,当点击该链接时,它应该将页面滚动到锚点!。因为页面上没有这样的锚点,所以页面不会移动。 (从技术上讲,您可以在页面上使用名称为 ! 的锚点 [! 是一个完全有效的 HTML id 值]。只是……您可能没有。 )

您通过将id 值分配给元素(或使用过时的&lt;a name="..."&gt;...&lt;/a&gt; 构造)在页面上创建锚点; hrefs 带有 片段标识符# 后面的位)告诉浏览器加载资源(在您的示例中,它是当前页面,已加载)然后向下滚动到那个锚。例如,如果您在页面上有&lt;div id="foo"&gt;...&lt;/div&gt;,导航到该页面上的#foo,浏览器将向下滚动以显示该div。当您提供一个不存在的锚点时,不会进行滚动。

【讨论】:

  • 谢谢 T.J.刚刚用href="#dsf" 之类的随机字母对其进行了测试,这也有效,就像你的答案所示
  • @Webeng:旁注:#! 曾经是 Google 从 2009 年开始推荐的 Making AJAX applications crawlable 的一部分(基本上你做了 #!foo=bar,它告诉 Googlebot 查询一个硬编码的 HTML 版本的内容看起来像);他们deprecated 2015 年的建议。
  • 很高兴知道。我还注意到点击链接后 url 包含一个#!,并决定利用此功能不仅不进入页面顶部,而且给用户一个有趣的消息,如#enjoy_your_stay,同时当然页面上没有任何名为enjoy_your_stay的ID
  • @Webeng: :-) 另一种选择是使用href="javascript:;",它什么都不做。
猜你喜欢
  • 2014-10-21
  • 2011-04-21
  • 1970-01-01
  • 2015-12-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 2021-03-03
相关资源
最近更新 更多