2010-01-15 87 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