javascript - 仅需要使用 javascript 的元素的最佳实践(有限制)

标签 javascript html jquery

由于业务规则和要求,我需要一个可选项卡的元素(不使用 tabindex),看起来像一个链接,仅具有 javascript 功能(例如,它需要对 Web 服务进行 ajax 调用) )并且它不能包含任何特殊字符,例如“#”,因为 url 末尾将包含该字符,并且该字符将被我们的防火墙阻止,由于外部法规,防火墙设置得非常严格。 此外,href 不能为空,因为我们的网站位于 Sharepoint 内部,将其保留为空意味着您将被重定向到默认登录页面。

我遇到过各种问题,这些问题都包含一些真理和论据,可以使用一个元素而不是另一个元素,但这些问题没有一个包含令人满意的答案,即使它有一个标记的答案。例如:

这两个例子并不完全令人满意,因为对于第一个例子,尽管一个答案有很高的票数,但我不确定该答案是否满足上述要求。第二个确实出于同样的原因。

总而言之,在牢记限制和要求以及已知的语义和 JavaScript 最佳实践的情况下,以下哪个选项是首选?

<a href="javascript:void(0)" class="action"></a>  

或者

<a href="" class="action"></a>

或者

<a href="javascript;" class="action"></a>

或者

<button class="action"></button>

或者

<span class="action"></span>

使用(示例)ajax 调用:

<script>

    $('.action').click(function() {
        $.ajax({
            url: "test.html",
            context: document.body
            })
            .done(function() {
                $(this).addClass("done");
            });
        });
    });

</script>

如上所述,限制无法更改。期间。

最佳答案

我记得有一次老师告诉我最好是使用<a> tag ahd href 应该指向一个可能与 javascript 事件执行完全相同操作的页面。因此,如果出于任何原因,浏览器上的 javascript 被停用,用户仍然可以像任何正常网站一样使用该网站...但是这在论文上工作得很好...但是很难实现。

如果你在href上添加javascript代码或onclick您的用户将无法在新选项卡上打开链接(通过使用中间按钮或上下文菜单)...我个人讨厌在网站上...链接应该用于“链接”页面..而不是在当前页面上进行 javascript 更改,因此 <button>对我来说似乎更具语义性...

您还应该考虑搜索引擎优化(也许),因为机器人会尝试跟踪您的索引页面链接,但它们不会跟踪按钮。 Seo 是一个灰色地带,但如果机器人有最大链接数限制,我不会感到惊讶。如果您的页面有很多仅用于 js 的链接,则机器人可能无法正确索引您的网站

最后,我宁愿使用不引人注目的 Js,所以我真的尝试将行为与表示分开。当我看到 html 和 js 在一起时我觉得很难看

所以我会选择:

<button class="action"></button>

在 JS 上有一个事件监听器...嘿..但这只是我:)

希望这有帮助

关于javascript - 仅需要使用 javascript 的元素的最佳实践(有限制),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17326021/

相关文章:

javascript - 这段代码会返回 false 吗?

javascript - Rails 5 Action Cable 具有多个参数

javascript - jQuery 从具有给定名称的选中元素中获取值

javascript - 优化不同表单jquery重置表单字段

javascript - PhantomCSS - 无法从 DOM 调用函数

javascript - 如何将字符串转换为jsx?

css - 文本对齐和 div 不居中

css:插入 div 在父 div 中彼此 float

javascript - jQuery 切换动画与 element.forEach

javascript - 在加载和调整大小时将 javascript 函数的结果调用到 Jquery css 事件中