2011-03-03 11 views
2

네임 스페이스 변수에서 캐시 된 DOM 요소에 액세스하는 데 문제가 있습니다. 내 FeedManager의 구성 변수는 다음과 같이이다 : 여기에 $ feedContainer jquery에서 DOM 요소를 올바르게 캐시하는 방법은 무엇입니까?

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

는 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); 

무엇이 문제 일 수 있나요? 어떻게 내 config 개체에 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}; .....}); ', 작동하지 않습니다! 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') .ssss ({color : 'red'})와 같은 것을 추가 할 수 있습니다. '

TEST

');'작동하는지 확인하십시오. – rsp

+0

덕분에, 나는 그것을 해결, 초기화 전에 var 초기화, 그것을 작동! – Shahriar

관련 문제