2010-10-21 71 views
6

說明在Nemikor博客jQuery dialogs,斯科特·岡薩雷斯使用。每個()方法上的id選擇:使用jQuery。每個()方法

$('#page-help').each(function() { 
    var dialog = $('<div></div>') 
    .load($(this).attr('href')) 
    .dialog(...); 
    $(this).click(function() { ... }); 
}); 

由於id選擇可以只返回一個元素,使用.each()方法的目的是什麼? (通常用於對匹配元素進行迭代)。

是不是隻有沒有簡單的方法來執行一個函數的'頁面幫助'元素提供訪問$(this)?

+0

感謝大家,在這種情況下,似乎使用旨在迭代的方法實際上是訪問單個對象的最清晰和最簡單的方法。 – ChrisV 2010-10-21 17:44:09

回答

5

它可以讓你在不污染周圍命名空間的情況下處理一些事情。替代可能是:

(function($this) { 
    var dialog = $('<div></div>') 
    .load($this.attr('href')) 
    .dialog(...); 
    $this.click(function() { ... }); 
})($('#page-help')); 

我不知道哪兩個更令人不安。我想我不知道真的知道這是這樣做的原因(即命名空間的整潔)。

1

他使用.each()所以this指元素和他的變量封裝在回調函數,雖然這也將工作(但你必須變量四周留有):

​​
0

可能也可以做這樣的,但包裝給你幸運使用$(本),而不是下面的代碼:

var idPageHelp = $($('#page-help')[0]); 
var dialog = $('<div></div>') 
    .load(idPageHelp.attr('href')) 
    .dialog(...); 
idPageHelp.click(function() { ... }); 

注意我做你希望把重點放在只是第0個元素的假設,我也關注你想使用idPageHelp作爲jQuery對象,所以我強迫它被包裝在一個jQuery對象中。

0

爲什麼不只是分配一個變量?

var ph = $('#page-help') 
var dialog = $('<div></div>') 
ph.load($(this).attr('href')) 
ph.dialog(...); 
$(ph).click(function() { ... }); 
}); 
+2

因爲現在這個變量就在那裏浮動,隨時會被一些天真的封閉無意中拾取。 – Pointy 2010-10-21 17:30:44

1

我會說這是一種風格選擇。我其實很喜歡你在這裏展示的選擇器方式,因爲它以(以我自己)自我記錄的方式將範圍附加到邏輯中的主要參與者。