2011-08-29 78 views
0

我有一個for聲明像對於聲明的問題

function myspecialFunction(elem) { 

var currentItem = elem; 
var currentImg = elem.find('img'); 

jQuery(currentImg).append('some text'); 
... 

這個問題似乎是,當elem具有相同的圖像項目> 1 - 它將覆蓋以前的數據?也就是說,當返回相同的currentImg時 - 語句會覆蓋之前的數據?

如何確保保留相同的currentImg值?即我希望使用像$(this)但它似乎不工作?我的HTML看起來像

+0

你是什麼意思的「以前」? – Blazemonger

+0

我的意思是,如果我有上面列出的2個完全相同的html,那麼第一次迭代數據會被覆蓋2次,因爲它的類和img相同?我想保留每個?我遇到的問題是 - 當currentImg被覆蓋 - 如果另一個元素存在相同的img和類,那麼它也寫了? –

+0

你是說有時在有多個圖像? –

回答

1

你可以把上面的

jQuery('.class').each(function() { 
    myspecialFunction(jQuery(this)); 
}); 

function myspecialFunction(elem) { 
    var currentItem = elem; 
    var currentImg = elem.find('img'); 

//.... 
} 

這是更地道和$(selector).each()引入了封閉,以確保正確的值在每個循環迭代中被捕獲。

做for循環純類似的東西會

var myClass = jQuery('.class'); 

for (var i = 0, len = myClass.length; i < len; i++) { 
    (function() { 
     myspecialFunction(jQuery(myClass[i])); 
    })(); 
} 

function myspecialFunction(elem) { 

    var currentItem = elem; 
    var currentImg = elem.find('img'); 
    // ... 
} 

根據你的目標瀏覽器,比只是一個CSS類更具體的可以幫忙也即,如果所有的元素,你是選擇都是相同的標籤名稱,然後在選擇器中使用標籤名稱。

+0

-感謝響應。我的問題是我有一個很大的數據集,'$ .each'不能很好地執行。 –

+0

使用立即調用的匿名函數在循環中引入閉包。 –

+0

我該怎麼做呢? –

0

像這樣使用jQuery each

jQuery('.class').each(function(){ 
    myspecialFunction($(this)); 
}); 
0

currentImg對於它所在的函數是本地的......不僅會在每次調用時被覆蓋,它甚至不會存在於該函數之外。

你想創建一個elem.find('img')返回值的列表嗎?如果是這樣,那麼我認爲你錯了。你需要在函數外面定義一個列表變量。

+0

感謝您的回覆。任何機會的一些示例代碼來協助:)我遇到的問題是 - 當currentImg被覆蓋 - 如果另一個元素存在相同的'img'和'class',那麼它也寫了? –

+0

取決於您在定義它時不顯示使用currentImg的代碼。 –