2011-07-25 74 views
1

我使用.each()來遍歷jQuery對象$firstParagraph中的鏈接。在遍歷鏈接時,我想以絕對的方式引用它們,而不調用$(this),每次調用它時都會創建一個新對象。因爲當我在鏈接上單獨遍歷兩次(如下面的代碼所示)時,兩個實例中完成的工作並未結合。

$firstParagraph = $("p").eq(0); 

// Iterate over the links once 
$firstParagraph.find("a").each(function() 
    { 
     $this = $(this); 
     // Modify $this 
    }); 

// Iterate over the links a second time 
$firstParagraph.find("a").each(function() 
    { 
     $this = $(this); 
     // I want to modify $this again, but without loosing 
     // the work I did in the first iteration 
    }); 
+1

你不應該修改'$(this)'。你想做什麼? – SLaks

+0

你在修改什麼? – Sparkup

+2

爲什麼不把兩個邏輯結合在一個循環中? – ShankarSangoli

回答

4

而不是像你問的那樣對付jQuery的暴力,讓我告訴你如何去做你實際需要做的事情:使用$(this).data('somekey', someval)$(this).data('somekey')來代替直接修改$(this)作爲一個對象,無論您想要做什麼,都可以將數據附加到您的$(this)概念上,以便您能夠恢復原狀。 (文檔here。)

+0

這聽起來很有希望。非常感謝! – Randomblue

+0

@Randomblue:沒問題。 :) – chaos

0

你可以做這樣的事情:

var elemArray = []; 
// Iterate over the links once 
$firstParagraph.find("a").each(function(i) 
    { 
     $this = $(this); 
     elemArray[i] = $this; 
     // Modify $this 
    }); 

// Iterate over the links a second time 
$firstParagraph.find("a").each(function(i) 
    { 
     $this = elemArray[i]; 
     // I want to modify $this again, but without loosing 
     // the work I did in the first iteration 
    }); 

我不知道這是否是因爲東西可以在兩個環路之間改變是個好主意。

1

爲什麼不追加到Array?當你使用簡單的變量時,它會一直覆蓋它。

相關問題