【发布时间】:2010-05-13 12:42:38
【问题描述】:
最近我发现自己经常使用 jQuery 和 JavaScript,经常做与使用 CSS 之前相同的事情。
例如,我使用 JavaScript/jQuery 交替表格行颜色或创建按钮和链接悬停效果。这可以接受吗?或者我应该继续为这些事情使用 CSS 吗?
所以真正的问题是: 当我使用太多 jQuery 时?当我越界时如何理解?
【问题讨论】:
标签: javascript jquery css
最近我发现自己经常使用 jQuery 和 JavaScript,经常做与使用 CSS 之前相同的事情。
例如,我使用 JavaScript/jQuery 交替表格行颜色或创建按钮和链接悬停效果。这可以接受吗?或者我应该继续为这些事情使用 CSS 吗?
所以真正的问题是: 当我使用太多 jQuery 时?当我越界时如何理解?
【问题讨论】:
标签: javascript jquery css
如果您使用jQuery to do things that can be done easily without jQuery,您将越界。 jQuery 的目的是让生活更轻松,但不应以牺牲兼容性或可用性为代价。
jQuery 绝对不应该用作 CSS 的替代品——想想那些禁用了 JavaScript 的用户。
我知道这张图片被过度使用了,但有人不得不把它扔在这里:
【讨论】:
我不认为这里有一条“线”,我认为那里有一些简单的东西和一些灰色区域,你必须平衡你想要的东西。高级功能、性能、兼容性,想想这些是一个三角形,很难同时做到所有 3 个尽可能好。
如果 CSS 可以做到,当然可以在 CSS 中做到。如果不能在 CSS 中完成,请使用 jQuery,但不要在不需要开销的地方使用 jQuery,例如$(this).attr("id") 通常可以是 this.id,很多东西都可以在 DOM 上使用,并且仍然可以跨浏览器的方式使用。
你什么时候用的太多了?当它不是需要时,有时您需要 jQuery 来实现跨浏览器 CCS3 选择器,有时您使用的是已经可用的 CSS 选择器将它放在样式表中。还有一百个其他示例,但是如果您可以在没有它的情况下以跨浏览器干净的方式通过,那么就没有必要了,像褪色这样的事情并非易事。如果你完全需要包含 jQuery,没有理由不使用 .fadeIn() (代码已经包含,为什么要复制它?)
正如 cmets here 中所说,您的网站应该提供所有基本功能,无需 javascript,这通常不是问题,例如捕获点击并通过 AJAX 加载内容...如果您不捕获它,他们会重新加载整个页面,这是对标准行为的简单回退。然而,所有的“花里胡哨”?这肯定是固执己见,但我认为您不应该在没有 JavaScript 的情况下提供所有功能。用户将其关闭,他们没有得到花哨的东西,这很好...以 SO 为例,禁用 javascript 会禁用许多 非必要功能,您可以浏览一下很好,但是评论、投票,主要是actions,如果没有 JavaScript,就不一定可用。
【讨论】:
$(#IdSelector) 选择了运行时匹配的 元素,这组元素是链中使用的元素,它们可能会更改并且与原始选择器不匹配的事实对于生命来说并不重要链,当你再次使用选择器时,这很重要:)
如果您关闭浏览器上的 java 脚本,并且您的网站/应用程序无法运行或无法正常运行,那么您就有问题了。
JS 很棒,但它永远不会阻止用户使用你构建的东西,如果它被禁用的话。
【讨论】:
如果它在 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 样式,您还可以为 body 设置一个类,以便为支持 Javascript 的浏览器使用 CSS 设置样式:
/** jQuery **/
$(document).addClass('JS-enabled');
/** CSS **/
body #table tr{
background: #FFF;
}
body.JS-enabled #table tr {
background: blue;
}
【讨论】:
jQuery 最常在文档加载后应用。我想如果你可以用纯 CSS 实现同样的目标,那么 CSS 就是要走的路。浏览器的负载更少,如果有人没有启用 jQuery,至少还有(一些)样式,因为 CSS。
【讨论】:
例如,我使用 JavaScript/jQuery 交替表格行颜色或创建按钮和链接悬停效果。这可以接受吗?还是我应该继续使用 CSS 来处理这些事情?
真的,这取决于您的浏览器支持。您可以使用以下代码对表格进行斑马条纹处理:
table.classname tr:nth-child(even) td {
background-color: #ddd;
}
但这在 Internet Explorer 中根本不起作用(尽管它应该在即将发布的版本 9 中)。因此,如果您需要在跨浏览器中显示相同的所有内容,请改用 jQuery。
对于链接悬停效果,假设您的意思是颜色变化等而不是花哨的动画,肯定使用 CSS,因为这在所有地方都受支持。
【讨论】:
好吧,不要将我标记为巨魔......
如果您的网络应用程序无法在没有启用 JavaScript 或与 JQuery 不兼容的环境中运行,那么请使用您最容易管理的方式。如果应用程序实际上根本无法工作,那么为应用程序提供视觉支持是没有任何好处的。
如果你想让它稍后在没有 JavaScript 支持的情况下工作,那么你应该尝试使用 css。但是,如果您不打算支持无 JavaScript 并且它可以工作,那么请选择对您来说最简单的方法
【讨论】: