【问题标题】:JavaScript-only links in HTML5HTML5 中的纯 JavaScript 链接
【发布时间】:2015-08-27 06:56:34
【问题描述】:

我知道这个问题到处都有答案,但结果没有一个让我满意。

有没有官方的 HTML5 方法来处理没有 href 的可点击元素?

我一直在做的就是这样:

<a>Link</a>

当然,它们可能有 ID 或类,但举个例子并不重要。我让它们可以通过脚本点击,并且没有在其中添加任何href。有些人认为它不正确。

其他选项是:

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

说实话,我讨厌这种方法,因为它使 href 属性包含垃圾。

甚至另一种方法是使用另一个标签:

<div>Link</div>

有什么标准化的方法吗?或者,也许任何没有正确 href 的方式都是不正确的,因为众所周知,链接实际上应该为非 js 人提供正确的 href。

编辑

好的,我看到答案是我所期望的。需要明确的是,我知道如何让它工作,我正在寻找语义正确的方法来做到这一点。如果你们认为通过 HTML 验证的就是好的 HTML,那你就错了。

【问题讨论】:

  • 在任何元素“除了a”上使用onclick,然后做你喜欢的事。请注意搜索引擎不会找到这些链接并会杀死 SEO
  • 那么,如果你不想使用href,为什么要使用&lt;a&gt;
  • @ppumkin 它们不是用来找的,主要是弹窗开启器或一些脚本功能。
  • @Pepo_rasta 因为这仍然是一个锚 - 触发某些东西的元素。
  • 我投票决定将此问题作为离题结束,因为我认为应该在其他地方提出这个问题,这不是真正的编程问题,而是更多关于 UX 的问题(阅读他们的帮助页面在发布之前)。此外,您可以阅读this article 和 cmets,它们表明问题不清楚关于“可点击元素”的推荐做法是什么。

标签: javascript html anchor semantic-markup


【解决方案1】:

有效期:

在没有href 属性的情况下使用&lt;a&gt; 没有问题。在 HTML5 中,它是 placeholder hyperlink。这是完全有效的。你可以try validating。没有错误或警告。

示例用法:

<a id='mya'>Link</a>
$(function(){
    $('#mya').click( function() {
        alert('Click No href'); 
    });
});

See it running

语义和其他一切:

阅读here 了解详细解释和推理。

【讨论】:

  • 即使在 html 4.1 中也可以成功验证 html 代码。没有href 属性的&lt;a&gt; 标记是一个锚点。自 1994 年起有效...
  • 感谢您提供更多信息!
  • 我听说过占位符超链接,但我不确定它到底是什么。没有错误并不能使它成为好的 HTML,因为此外它必须在语义上是正确的。这就是我的问题,什么是语义上正确的方法。
  • 语义上正确的方法是:&lt;a href="the-url"&gt;The text&lt;/a&gt;。其他的事情是正确的,但你的发明是你喜欢的,你的想象力让它。
  • @MarcosPérezGude 你是对的,这是错误的:webdesign.about.com/od/html5tutorials/qt/…。 (第一句话)。
【解决方案2】:

说实话,我讨厌这种方法,因为它使 href 属性包含垃圾。

当然,垃圾是尝试删除链接中的href 属性,因为它是这样工作的,Google 和其他搜索引擎无法使您的网络可导航。你可以用你喜欢的风格制作。我给你举个例子:

示例 1

带有data-*属性:

 <a data-link="http://newurl.com">link</a>
 <script>
     $('a').each(function() {
         $(this).on('click', function(e)  {
              var ds = $(this).dataset();
              window.location.href = ds.link;
         });
     });
  </script>

示例 2

js中有数组,html中有id

 <a id="newurl">link</a>
 <script>
     var aLinks = [];
     aLinks['newurl'] = "http://newurl.com";
     $('a').each(function() {
         $(this).on('click', function(e)  {
              window.location.href = aLinks[$(this).attr('id')];
         });
     });
  </script>

根据你的喜好,选择你喜欢的。

【讨论】:

    【解决方案3】:

    JavaScript

    function popup1() = {
         alert('Please do this....');
     }
    

    HTML 标记

     <div onclick='popup1'> Do you want to join? </div>
    

    或者使用jQuery

    ​​>

    HTML 标记

     <div class='popup1'> Do you want to join? </div>
    

    jQuery

     $('.popup1').click(function(){   
        alert('Please do this....');
     });
    

    或者使用更干净的jQuery

    ​​>

    HTML 更干净,但 JS 更糟糕——你需要找到一个很好的平衡

    <div > Do you want to join? </div>
    <div > Newsletter? </div>
    <div > Cookies? </div>
    

    jQuery

    $('div').click(function(){   
           if ($(this).text() == 'Do you want to join?')
               alert('Please do this....');
        if ($(this).text() == 'Newsletter?')
               alert('Please do this....');
        if ($(this).text() == 'Cookies?')
               alert('Please do this....');
         });
    

    【讨论】:

    • 这没有回答我的问题,加上onclick 属性很难看。
    • @ppumkin 在 HTML 中定义事件是一种不好的做法。
    • 真的……但他们是 W3C 的最大贡献者!!它只是证明拥有干净的 HTML 没有任何意义。我已经看到了可怕的页面来源和网站的作品。普通用户不关心 HTML 的样子,只关心站点是否正常工作。浏览器处理过时的东西就好像它们没有过时一样......因为人们仍在使用它们。对于想要使用新事物的开发者来说,HTML5 更像是一种扩展。
    • 是的,但是作为开发人员,您不想回来编辑您编写的任何代码,因为规范已更改并且浏览器不再支持您已弃用的习惯。今天最好坚持明天的标准。
    • 浏览器不会删除过时的实现...除非它们是安全威胁。浏览器仍然必须实现所有规范,即使标记为过时。所以 1989 年制作的网站,今天仍然可以使用,即使 20 多年没有人改变过网站!
    猜你喜欢
    • 1970-01-01
    • 2017-11-09
    • 1970-01-01
    • 2020-02-15
    • 2014-08-15
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多