2011-03-03 13 views
2

名前空間変数からキャッシュされたDOM要素にアクセスするのに問題があります。 FeedManagerの設定変数は次のとおりです。jqueryでDOM要素を正しくキャッシュする方法

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

ここで、$ feedContainerはhtmlのul要素です。フィードから構築された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); 

何が問題になりますか?どのように私の設定オブジェクトでinitialziedキャッシュされた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から実行した場合、それは動作しますが、私は外部JSファイルからのjQueryを使用するときに使用して (機能($){ \t initWork =機能(){ \t \t FeedManager.initを() 'ファイル; \t}; .....}); '、それは動作しません!私は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'}) '

TEST

'); 'それが動作するかどうかを確認します。 – rsp

+0

ありがとう、私はそれを解決した、私は初期化varの前にinitと呼ばれる、それは動作します! – Shahriar

関連する問題