2010-01-15 89 views
18

什么是你已经看到,写或应该避免的JQuery坏/最坏的做法?Jquery糟糕的做法

+1

我知道我已经评论过,但这个问题是一个确切的重复:http://stackoverflow.com/questions/1229259/jquery-pitfalls-to-avoid – 2010-01-15 08:08:57

回答

30

您应该避免的一件事是再次使用每行中的“易用”选择器,因为选择器的JavaScript实现不是,即有效。当然,jQuery的人正在优化它,但我认为你应该尽可能少地使用它。

所以,这是一个不好的做法。

$("li ul span").show(); 
$("li ul span").toggleClass("bubu"); 

链接好

$("li ul span").show().toggleClass("bubu"); 

而且在一个局部变量记住的东西也还不错:

var allspans = $("li ul span"); 
allspans.show(); 
allspans.toggleClass("bubu"); 
+0

是的,很多人这样做。这对性能来说太糟糕了。 – jerone 2010-01-15 07:49:33

+0

+1用于指出链接和局部变量! – 2010-01-15 07:50:25

2

仍然使用旧的文件准备好功能:

$("document").ready(function(){ }); 

而不是非常com mon:

$(function(){ }); 

这并不是非常糟糕,但我显示人们不会用新的api起床。

+13

使用'$(document).ready(...)'通常用于使代码明确清晰。当然这不是必须的,但它不是一个不好的做法。 – 2010-01-15 07:49:31

+1

这就是我所说的。 :) – jerone 2010-01-15 07:52:05

+1

你能解释一下,我为什么要那样做?我认为,第一个版本更有意义 - 我们将一个事件处理程序附加到DOCUMENT对象。另一个..甚至可能更好的工作..不解释自己。 – naivists 2010-01-15 08:08:26

17

有两个,我看到了很多:

首先,在点击事件中,id访问是这样的:

$("a").click(function(e){ 
    var id = $(this).attr('id'); 
}); 

这造成周围的DOM一个 jQuery对象节点,调用一个函数。以下是正确的做法:

$("a").click(function(e){ 
    var id = this.id; 
}); 

注:那你还会看到$(this).attr('href'),但那是因为jQuery它标准化跨浏览器的方式是正确的。

第二正在通过任何东西,除了一个DOM节点到jQuery的调用的参数scope

$(".child", $(".parent")).doSomething(); 
// or 
$(".child", ".parent").doSomething(); 

没有速度增益都做这个。当你看到一个速度增加,是当你已经拥有的DOM元素:

$('div').click(function(){ 
    $('img', this).doSomething(); // This is good 
}); 
5

詹姆斯Padolsey已经jQuery的代码味道书面0​​。我建议阅读它。

+0

这是一个不错的文章 – Anurag 2010-01-15 08:42:29