如何在jquery中正确缓存DOM元素?

如何在jquery中正确缓存DOM元素?,jquery,list,dom,Jquery,List,Dom,从名称空间变量访问缓存的DOM元素时遇到问题。我的FeedManager配置变量如下所示: var FeedManager = { config : { $feedContainer : $('#feedContainer'), feedUrl : 'http://rss......', feedLimit : 10 },.... 这里$feedContainer是html中的ul元素。我想添加从提要构建的li元素。FeedM

从名称空间变量访问缓存的DOM元素时遇到问题。我的FeedManager配置变量如下所示:

var FeedManager = {
    config : {
        $feedContainer : $('#feedContainer'),
        feedUrl : 'http://rss......',
        feedLimit : 10
    },....  
这里$feedContainer是html中的ul元素。我想添加从提要构建的li元素。FeedManager对象中有一个function 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元素。

您的#feedContainer元素是否存在于HTML中,还是稍后获取?如果在无法缓存该元素之前提取该元素,则只能使用选择器字符串,如 饲料容器:“#饲料容器”`

在FeedManager对象中,然后使用

$(FeedManager.config.feedContainer).append(li);
如果它存在于HTML中,那么请确保在DOM就绪后定义FeedManager对象,即在

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

$(函数(){…})

您需要确保已加载
$(“#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>

$(函数(){
风险值管理器={
配置:{
$p:$(“p#你好”)
},
init:function(){
var label=Manager.config.$p.html();
控制台日志(标签);
}
};
Manager.init();
});

您不能在文档片段中创建元素,附加列表元素,然后注入DOM。是的,一旦DOM准备就绪,并且HTML中已经存在#feedContainer,我就会使用该函数。我仍然没有发现我哪里出了问题。但是如果使用$('#id')缓存var,我需要用$(..)agian包装它还是只使用var.append(..)?如果使用$('#id')缓存它,那么只需要var.append(…),但在缓存时它必须存在于DOM中。也许它是后来添加到文档中的,而不是出现在原始html中?您可以尝试在FeedManager定义之前或之后添加一些测试,以查看它是否准备就绪,例如,您可以添加类似于
$('#feedContainer').css({color:'red'})的内容并查看它是否工作。谢谢,我解决了它,我在变量初始化之前调用了init,它工作了!是的,当我从同一个html文件运行时,它可以工作,但是当我从外部js文件使用jquery时,使用“(function($){initWork=function(){FeedManager.init();};…});”,它不起作用!从dom ready调用initWork();我通过将上面的脚本与HTML分离来验证它。它仍然可以正常工作。