如何在jquery中正确缓存DOM元素?
从名称空间变量访问缓存的DOM元素时遇到问题。我的FeedManager配置变量如下所示:如何在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
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分离来验证它。它仍然可以正常工作。