我是否使用了太多 jQuery?我什么时候过线?

IT技术 javascript jquery css
2021-03-03 02:03:28

最近我发现自己经常使用 jQuery 和 JavaScript,经常做与使用 CSS 之前相同的事情。

例如,我使用 JavaScript/jQuery 替换表格行的颜色或创建按钮和链接悬停效果。这是可以接受的吗?或者我应该继续使用 CSS 来处理这些事情?

所以真正的问题是:当我使用过多的 jQuery 时?当我越线时,我如何理解?

6个回答

如果您使用jQuery 来完成无需 jQuery 即可轻松完成的事情,那么您就越界了jQuery 的目的是让生活更轻松,但不应以牺牲兼容性或可用性为代价。

jQuery 绝对不应该被用作 CSS 的替代品——想想禁用 JavaScript 的用户。

我知道这张图片被过度使用了,但有人不得不把它扔在这里:

图片来源- bobince

@Chris S:哈哈。@Nick Craver:当我看到这些相关的问题时,它们仍然让我感到震惊。
2021-04-20 02:03:28
@sibidiba - 在 jQuery(或任何框架)的防御中,如果浏览器开始时没有以如此不同的方式实现事物,它们就不会被创建......或者至少不会看到它们当前的用法. 是的,我在看着你们Internet Explorer 团队。
2021-04-21 02:03:28
-1 敢于嘲笑伟大而强大的 jQuery!
2021-04-23 02:03:28
哈哈哈,这是我第一次看到这样的画面。这是纯金
2021-04-26 02:03:28
更正之前的评论,我没有注意到右边的“相关”部分也是纯金的“我的腿在哪里?” 是新的赢家。
2021-04-29 02:03:28

我不认为这里有一条“线”,我认为有一些简单的事情和一些灰色区域,你必须平衡你想要的东西。先进的功能,性能,兼容性,认为这些都是一个三角形,这是很难做到的所有3尽可能地在同一时间。

如果CSS可以做到,当然在CSS中做到。如果它不能在 CSS 中完成,请使用 jQuery,但不要在不需要开销的地方使用 jQuery,例如$(this).attr("id")通常可以this.id,很多东西都可以在 DOM 上严格使用并且仍然以跨浏览器的方式使用。

你什么时候用得太多?不需要它时,有时您需要 jQuery 用于跨浏览器的 CCS3 选择器,有时您使用已经可用的 CSS 选择器将它放在样式表中还有一百个其他例子,但如果你可以在没有它的情况下以跨浏览器干净的方式获得,那么就没有必要了,像褪色这样的事情不是微不足道的。如果您根本需要包含 jQuery,那么.fadeIn()一旦拥有就没有理由不使用(代码已包含,为什么要复制它?)

JavaScript 与无 JavaScript

正如这里的评论中所说,您的网站应该提供所有基本功能而无需 javascript,这通常不是问题,例如捕获点击并通过 AJAX 加载内容......如果您不捕获它,他们会重新加载整个页面,这是标准行为的简单回退。然而,所有的“花里胡哨”?这是肯定的,但我认为您不应该向后弯曲以提供没有 JavaScript 的所有功能。用户关闭它,他们没有得到花哨的东西,那很好……以 SO 为例,禁用 javascript 禁用了许多非必要功能,您可以浏览得很好,但是评论,投票,主要行动是'

@chobo2 - 我说“通常”是因为有时您想要一个空字符串与未定义的另一个操作。您可以更改链中的 Id,只要您在当前链之外操作就可以了。$(#IdSelector)选择的元素,它正在运行时一致,即集合中的元素是什么在链中,他们可能会发生变化,不符合原来的选择无所谓了链条的使用寿命事实上,当你再次使用选择,那么这很重要:)
2021-04-15 02:03:28
确切地说:一旦引入 jQuery,就没有“行”。这就像问“我什么时候有太多的 HTML?” 您可能有低效的代码,但这与您使用的库并没有真正的关系。如果你的代码效率低下,你应该让它更有效率。这可能意味着添加更多 jQuery 并删除一些 HTML/CSS。或者它可能意味着删除一些 JS 并添加更多的 CSS。取决于它的低效之处。
2021-04-20 02:03:28
对于样式你的网站,真的是行不通的。但是,如果您依赖于读取 JSON 来获取数据,并且读取它的唯一方法是通过 Jquery,那么您就有问题了。应该考虑实施,并且可以在那里越过界限。
2021-04-23 02:03:28
StackOverflow 有很多不好的做法的例子——如果我想要一个紧凑的 SO 接口,我需要通过浏览器实现以使其完全可用,而不是一个更简单、轻量级的基于 HTTP+DOM 的应用程序。如果这些东西不需要解析JS,那将是一个更好的站点
2021-04-25 02:03:28
你能解释一下这些之间的区别吗?“$(this).attr("id") 通常可以是 this.id 以及你为什么这么说。” 我也想知道如果你需要设置 id 会发生什么?你可以去 this.id = "newId" 吗?如果是这样,如果您进行链接是否仍然值得单独执行此操作并将其余部分链接起来,会发生什么?
2021-05-05 02:03:28

如果您在浏览器上关闭了 java 脚本,并且您的站点/应用程序在没有它的情况下无法运行或无法正常运行,那么您就有问题了。

JS 很棒,但它永远不应该阻止用户使用您构建的东西,如果它被禁用。

@Peter - 我强烈不同意“完全”的基本功能,是的,绝对......花里胡哨?没有JavaScript是一种目前使用的所有浏览器的标准部分(带有非常非常的1%的例外小部分),为什么我应该完全忽略它的存在?如果您因为不喜欢而拔掉鼠标,那也没关系,我没有责任让应用程序在没有它的情况下100%工作……关闭 javascript 有何不同?
2021-04-15 02:03:28
@Peter - 您可以自己找到数字:stackoverflow.com/questions/121108/……当然,这取决于您的听众,哪些数字对您很重要,但该数字并非凭空而来。此外,您对功能的定义非常奇怪,因为大多数人会将其定义为“某事做什么”。这都是“功能”,无论是基本功能(例如导航),这就是重点。
2021-04-15 02:03:28
一个网站/应用程序应该在没有 JavaScript 的情况下完全可用。JS 是为了让事情变得更简单、更方便,但功能应该在没有 JS 的情况下工作。
2021-04-16 02:03:28
我只是部分同意这一点,如果它非常复杂,或者在没有 javascript 的情况下要付出更多的努力……那么你就不会得到那个功能。例如,尝试在此处关闭 javascript,然后投票,或回复此评论……有些事情没有 javascript不合理的,而关闭它是用户的选择。
2021-04-24 02:03:28
我觉得人们说所有功能都必须在关闭 JS 的情况下工作有点傲慢。谢谢你告诉我如何优化我的工程资源,这样我就可以迎合他们地下室里一直使用没有白名单的 NoScript 扩展的两个人,以及一个从 2001 年开始使用手机浏览器的人。
2021-04-29 02:03:28

如果它很容易在 CSS 中实现,那么放弃 jQuery 并在 CSS 中实现。这样您就不必依赖 javascript 执行来获得应用程序的外观/感觉。

如果你可以设置一个类属性而不是很多样式属性,那么你使用了太多的 jQuery。例如:

/** Select 400 rows and change the background colour **/
$('#table tr').css('backgroundColor', 'blue');

代替:

/** jQuery **/
$('#table').addClass('blueRows');

/** CSS **/
#table tr.blueRows {
    background-color: blue;
}

为了避免 jQuery 样式,您还可以为主体设置一个类,以便在启用 Javascript 的浏览器中使用 CSS 更容易设置样式:

/** jQuery **/
$(document).addClass('JS-enabled');

/** CSS **/
body #table tr{
    background: #FFF;
}

body.JS-enabled #table tr {
    background: blue;
}