2013-03-06 62 views
0

我試圖緩存this選擇器,但無法使其工作。緩存此選擇器css

$(function() { 

    var $this = $(this); 
    //some code 

    $('.collapse').each(function(index) { 
     $this.collapse("toggle"); 
    }); 

我在做什麼錯以上?

$(function() { 

    var self = $(this); 

    $(document).on('click', '.expand-collapse', function(e) { 

    $('.collapse').each(function(index) { 
     self.collapse("toggle"); 
    }); 

    if self.is('.i .icon-white .icon-plus-sign')) { 
     self.toggleClass("is-collapsed") 
    } 
    else { 
     self.toggleClass('is-collapsed'); 
    } 
    }); 
}); 

我已經更新了我的代碼

+0

你會得到什麼錯誤?請發佈完整的代碼示例。 – j08691 2013-03-06 20:15:55

+0

你嘗試var myVar = $(this);和$(myVar).collapse(「toggle」); – MIIB 2013-03-06 20:16:15

+0

@MIIB - 當你已經有一個jQuery對象時,不需要再次調用'$()'。這就像'$($(this))'。 – nnnnnn 2013-03-06 20:29:16

回答

1

$(this)在您定義的全局上下文中沒有意義,因爲它引用了整個文檔。如果你想緩存一個引用到你正在點擊/循環的單個對象,將你的變量放在事件處理程序/循環的上下文中。

在您的代碼中,現在看起來似乎沒有任何理由「緩存」該引用,因爲您可以簡單地將當前對象稱爲$(this)並獲得相同的結果(除非您實際上是試圖保持對整個文檔的參考)。

此外,您的變量名稱「self」是一個javascript字,它傳統上指的是當前窗口對象,因此您正在覆蓋該引用。我建議將該名稱更改爲_self或其他名稱。

+0

self是窗口的屬性,不是JS字,所以聲明局部變量不會覆蓋它。 – nnnnnn 2013-03-07 03:38:00

+0

自己也指窗口對象。你是正確的聲明局部變量不會覆蓋它,但在全局範圍聲明它將導致一些混淆。 – Michal 2013-03-07 06:16:19

2

上面這並不是真正意義:如果您遍歷元素,你不想調用只有一個獨特的元素的功能。

你在這裏什麼都沒有。

+0

我已經更新了上面的代碼。 – newbie 2013-03-06 20:38:00