代码之家  ›  专栏  ›  技术社区  ›  Jakub

锚标签的正确用法是什么?

  •  1
  • Jakub  · 技术社区  · 15 年前

    我已经读过锚标记是如何神圣的,它不应该与javascript一起使用:

    <a href="javascript:(alert('no!'))">Popup</a>

    它应该 只有 用于指向另一页的链接:

    <a href="/grassIsAlwaysGreener.html">Take me over there</a>

    那么,在javascript中使用锚标记的正确方法是什么?我应该使用:

    <a href="#" onclick="someJsFn();">Energize!</a>

    或者其他变种?我对这个问题的不同看法有些困惑。还有,我应该担心的只是搜索引擎优化,如果使 href 一篇javascript文章?还是说这更像是一个符合web标准的交易?

    思想?希望我不是唯一一个困惑的人。

    4 回复  |  直到 13 年前
        1
  •  1
  •   DarkWingDuck    15 年前

    不仅仅是Jakub;即使是最大的WWW公司也使用不同的方法。

    不过,根据Netscape时代以来的经验,我不会使用:

    <a href="javascript:(alert'no!')">Popup</a>
    

    这会在某些浏览器上造成一些麻烦,比如打开一个空页面或破坏当前页面上的事件顺序。

    然而;

    <a href="#" onclick="someJsFn();">Energize!</a>
    

    或;

    <a href="javascript:void(0)" onclick="myJsFunc();">Link</a>
    

    别惹大麻烦,可以用。请注意,前一个可能会将滚动条重置为顶部。

    您应该尽可能使用有意义的链接目标和不引人注目的javascript,但这在现实生活中并不总是可能的。它不是一个定义好的标准,而是一个大多数web开发人员高度认同的方法。

    说到标准,有一个与这种情况有关:

    您应该考虑使用一个“按钮”来输入,它不会真正将访问者发送到页面,而是执行一个操作。这对搜索引擎优化也很重要。

        2
  •  1
  •   Paul Hadfield    15 年前

    正如@Sime所说(这应该是一个真正的答案),现在在任何HTML对象中直接引用javascript被认为是“不好的做法”。因此,在这些情况下,您可以使用类似jQuery的东西附加事件,使用“不引人注目的javascript”中列出的概念。

    正如你提到的,另一个考虑因素是搜索引擎优化和可访问性。如果搜索引擎优化对您的网站很重要,请确保该网站是完全导航只使用标准链接。同样,您可以使用“不引人注目的javascript”等来管理它。

        3
  •  0
  •   Brad Christie    15 年前

    我通常使用锚定(即,指定另一个用户可以通过javascript执行操作的位置的备用url,或者使用 javascript:void() / # )然后使用onclick事件执行任何您想要执行的操作。

    你也可以用 <span> 如果您担心一致性,只需要对其进行样式设置(更改光标,也可能更改颜色)就可以使其在视觉上明显地成为一个动作。

    我认为Facebook是最好的例子。他们几乎所有的链接都是javascript绑定的,但是他们也有一个“备份”页面,供那些不允许javascript或没有javascript的人使用(在当今时代,后者远不常见)。看看一个模块,它的反应就像你希望你的一样,看看他们是如何做到的。他们还投入了大量的工作在最佳实践中,您可以从中受益。

        4
  •  0
  •   Community Mohan Dere    8 年前

    如果有的话,您应该只通过使用不引人注目的javascript将锚链接绑定到javascript方法 Paul 提到。

    这意味着,使用关注点分离并将标记保留为html标记:

    <a id="Jolter">Energize!</a>
    

    后来

    <script type="text/javascript">
        $(document).ready(function(){
            $("#Jolter").click(function(){
                // doStuffHere ...
            });
        });
    </script>