最近我发现自己经常使用jQuery和JavaScript,经常做与使用CSS之前相同的事情。
例如,我使用JavaScript / jQuery替换表行颜色或创建按钮和链接悬停效果。这可以接受吗?或者我应该继续使用CSS来做这些事情吗?
所以真正的问题是: 当我使用太多jQuery时?我什么时候能越过界限了?
答案 0 :(得分:86)
如果你正在使用jQuery to do things that can be done easily without jQuery,那么你就越过了界线。 jQuery的目的是让生活更轻松,但不应以兼容性或可用性为代价。
jQuery肯定不应该用作CSS的替代品 - 想想禁用JavaScript的用户。
我知道这张图片过度使用,但有人不得不把它扔进这里:
答案 1 :(得分:7)
我认为这里没有“线”,我认为有一些简单的事情和一些灰色地带,你必须平衡你想要的。高级功能,性能,兼容性,想到这些都是三角形,很难同时做到所有3 。
如果CSS可以做到,当然可以在CSS中进行。如果不能在CSS中使用jQuery,但不要使用不需要开销的jQuery,例如: $(this).attr("id")
通常可以是this.id
,很多东西都可以严格地在DOM上使用,并且仍然以跨浏览器的方式提供。
你什么时候用得太多了?当它不是需要时,有时你需要jQuery用于跨浏览器的CCS3选择器,有时你使用的CSS选择器已经可用将它放在样式表中。还有其他一百个例子,但是如果没有它就可以通过跨浏览器的方式获得,那么就没有必要,像褪色这样的事情并不是一件容易的事情。如果你需要包含jQuery,那么你没有理由不使用.fadeIn()
(代码被包含在内,为什么要重复它?)
正如评论中所述,您的网站应提供所有基本功能而无需javascript ,这通常不是问题,例如捕获点击并通过AJAX加载内容...如果你没有捕获它们,他们会进行整页重新加载,这很容易回退到标准行为。但是,所有的“花里胡哨”?这是肯定的,但我不认为你应该向后弯腰,以提供没有JavaScript的所有功能。用户将其关闭,他们没有得到花哨的东西,这很好......以SO为例,禁用javascript禁用了很多非必要功能,你可以浏览一下很好,但评论,投票,主要是行动不一定没有JavaScript。
答案 2 :(得分:6)
如果您在浏览器上关闭了java脚本,并且您的站点/应用程序没有运行或看起来没有功能,那么您就遇到了问题。
JS非常棒,但它应该永远不会阻止用户使用您构建的内容,如果它已被禁用。
答案 3 :(得分:4)
如果它是CSS中容易实现的东西,那么抛弃jQuery并在CSS中完成。这样,您就不必依赖于javascript执行来获得应用程序的外观。
答案 4 :(得分:2)
如果可以设置一个类属性而不是很多样式属性,则使用过多的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样式,您还可以将一个类设置为正文,以便使用CSS为支持Javascript的浏览器设置样式:
/** jQuery **/
$(document).addClass('JS-enabled');
/** CSS **/
body #table tr{
background: #FFF;
}
body.JS-enabled #table tr {
background: blue;
}
答案 5 :(得分:0)
jQuery最经常在文档加载后应用。我想如果你能用纯CSS实现同样的东西,那么CSS就是你的选择。减少浏览器的负担,如果有人没有启用jQuery,至少还有(某些)风格因为CSS。
答案 6 :(得分:0)
好的,不要把我当作巨魔......
如果您的网络应用程序无法在没有启用JavaScript或与JQuery不兼容的环境中工作,那么只需使用最容易管理的内容即可。如果应用程序没有实际工作,那么为应用程序提供可视化支持没有任何好处。
如果你想在没有JavaScript支持的情况下使其工作,那么你应该尝试使用css。但是,如果您不打算不支持JavaScript,并且它可以正常工作,请使用最简单的方法
答案 7 :(得分:0)
例如,我使用JavaScript / jQuery替换表行颜色或创建按钮和链接悬停效果。这可以接受吗?或者我应该继续使用CSS来做这些事情吗?
真的,这取决于您的浏览器支持。您可以使用以下代码简单地对表格进行斑马条纹化处理:
table.classname tr:nth-child(even) td {
background-color: #ddd;
}
但这在Internet Explorer中根本不起作用(尽管它应该在即将发布的版本9中)。因此,如果您需要查看相同的跨浏览器,请使用jQuery。
对于链接悬停效果,假设你的意思是颜色变化等,而不是花哨的动画,肯定会使用CSS ,因为它在任何地方都受到支持。