2011-09-19 89 views
0

我有一個javascript對象(簡化)。爲什麼我不能將此元素引用設置爲變量?

var MyObject = (function(){ 

    var propertyOne = $('.links li:first-child'); 
    var propertyTwo = $('.links .active'); 

    function startup() 
    { 
    propertyOne.addClass("class"); //Works 
    propertyTwo.addClass("class2"); //Does not work 
    $('.links .active').addClass("class2"); // Works 
    } 

    return { 
    init: function() 
    { 
     startup(); 
    } 
    } 
}); 

我選擇propertyOne和propertyTwo的方式有什麼區別?我不明白爲什麼

propertyOne.addClass("class"); //Works 
$('.links .active').addClass("class2"); // Works 

然而...

propertyTwo.addClass("class2"); //Does not work 

誰能幫我解釋一下?

回答

3

在調用var propertyTwo = $('.links .active')時,propertyTwo的DOM元素不能存在,而只有調用startup()時纔會存在。

要確認這一點,我們需要更多關於您的腳本的信息。例如,如果在DOM完全加載之前創建了MyObject,然後在DOM完全加載之後(或者至少在加載了對應於$('.links .active')的元素之後調用init()的方法),我之前描述的內容可能會發生。

無論如何,你應該重點學習如何調試這樣的事情連同爲什麼這個特定的嘗試是行不通的。在這個過程中的主要步驟是行var propertyTwo = $('.links .active')後立即登錄到控制檯propertyTwo。如果控制檯顯示[] (至少在Chrome中),這意味着沒有匹配的元素,這將支持我說的事情發生。

+1

+1。jQuery的長度/大小是perfiect方法來di agnose這樣的條件http://api.jquery.com/length/ –

+0

啊,你是對的,我想我知道你要去哪裏。在DOM被加載後(在腳本的另一部分中),'active'類被應用。有沒有什麼方法可以將該元素設置爲我的對象的屬性? –

+0

也許,但我需要看到更多的代碼。您可以在運行您放入帖子的代碼之前設置「主動」類嗎?這將是一個非常簡單的解決方案。如果沒有,我真的需要看到更多的代碼(HTML和JS)提供進一步的幫助。 – maxedison

相關問題