2011-03-03 56 views
2

我從命名空間變量中訪問緩存的DOM元素時遇到了一些問題。我的FeedManager配置變量是這樣的:如何在jquery中正確緩存DOM元素?

var FeedManager = { 
    config : { 
     $feedContainer : $('#feedContainer'), 
     feedUrl : 'http://rss......', 
     feedLimit : 10 
    },.... 

這裏$ feedContainer是html中的ul元素。我想添加從feed中構建的li元素。 FeedManager對象中有一個funciton init()。但不知何故,它不能添加子元素。

init: function(){ 
      var feed = new google.feeds.Feed(FeedManager.config.feedUrl); 
       ...... 
       ...... 
       // this is not working 
       FeedManager.config.$feedContainer.append(li); 

但是如果裏面的init()函數,我再次得到feedContainer元素,它的工作原理!

var feedContainer = $('#feedContainer'); 
feedContainer.append(li); 

可以採取什麼問題嗎?以及如何在我的配置對象中使用初始化緩存的dom元素。

+0

會不創建一個文檔片段的元件,附加列表中的元素,然後注入到DOM。 – RyanP13

回答

1

內你需要確保$('#feedContainer')已經加載。

類似的例子:

<script type="text/javascript"> 
$(function() { 
var Manager = { 
    config: { 
     $p: $("p#hello") 
    }, 
    init: function() { 
     var label = Manager.config.$p.html(); 
     console.log(label); 
    } 
}; 
Manager.init(); 
}); 
</script> 
+0

是的,當我從相同的HTML文件運行它的工作原理,但是當我使用jquery從外部js文件使用' (函數($){ \t initWork =函數(){ \t \t FeedManager.init(); \t}; .....});',它不起作用!從dom準備好我正在調用initWork(); – Shahriar

+0

我通過將它與HTML分離來驗證上述腳本。它仍然正常工作。 – moey

+0

謝謝,我犯了一個錯字,它的工作原理! – Shahriar

1

您的#feedContainer元素存在於您的HTML中,還是稍後提取?如果以後牽強,你可以不緩存元素,你必須只使用一個選擇器字符串像 feedContainer:在你的FeedManager對象「#feedContainer'`

,然後使用類似

$(FeedManager.config.feedContainer).append(li); 

如果它存在於HTML中,那麼確保在DOM準備就緒後,即定義FeedManager對象。一個

$(document).ready(function() { 
    // ... 
}); 

$(function() { ... });

+0

是的,一旦DOM準備就緒,我正在使用該函數,並且#feedContainer已經存在於HTML中。但我還沒有發現我哪裏出錯了。但如果如果使用$('#id')緩存var,是否需要用$(..)agian或僅僅var.append(..)來包裝它? – Shahriar

+0

如果你使用$('#id')來緩存它,那麼你只需要var.append(...),但是它在緩存時必須存在於DOM中。也許它稍後添加到文檔中,並不存在於原始的HTML?您可以嘗試在FeedManager定義之前或之後添加一些測試,以查看它是否準備就緒,例如,您可以添加類似'$('#feedContainer')。css({color:'red'})。append( '

TEST

');'看看它是否有效。 – rsp

+0

謝謝,我解決了,我在var初始化之前調用了init,它工作正常! – Shahriar