追加后的jQuery回调

我有以下代码:

HTML

JS

 var site = { 'pageData' : [ { 'loadInTo' : '#aboutUs', 'url' : 'aboutUs.html', 'urlSection' : '.sectionInner' }, { 'loadInTo' : '#whatWeDo', 'url' : 'whatWeDo.html', 'urlSection' : '.sectionInner' }, { 'loadInTo' : '#ourValues', 'url' : 'ourValues.html', 'urlSection' : '.sectionInner' }, { 'loadInTo' : '#ourExpertise', 'url' : 'ourExpertise.html', 'urlSection' : '.sectionInner' } ]} for(i=0; i < site.pageData.length; i++) { var loader = site.pageData[i]; $('#body').append('
'); $(loader.loadInTo).load(loader.url + ' ' + loader.urlSection); }

我正在做的是循环遍历站点变量并使用jQuery的append方法写出一些div,其id在’loadInTo’中设置,这很好。 完成此操作后,我想使用jQuery的load方法用其他页面中的HTML填充div。 在附加div之后是否有回调? 像这样的东西:

 $('#body').append('
', function(){ $(loader.loadInTo).load(loader.url + ' ' + loader.urlSection); });

jQuery不支持.append的回调。 此外,一次附加数据更有效 ,而不是为每个元素调用.append 。 请参阅下面的代码。

每个要追加的元素都会添加到字符串中。 字符串完成后, 将添加一个标记 ,并附加HTML。 然后,激活轮询器,检查DOM中是否存在marker元素。 如果存在,则清除轮询器,删除标记,然后执行代码。

更新:设置ID时使用.substr(1) ,因为ID不应以#为前缀。

 var toAppend = ''; var markerID = 'mark-end-of-append' + (new Date).getTime(); //Random for(var i=0; i
'; } toAppend += '
'; $('#body').append(toAppend); var poller = window.setInterval(function(){ var detected = document.getElementById(markerID); if(detected){ //DOM is much more efficient window.clearInterval(poller); $(detected).remove(); //Remove marker for(var i=0; i

为什么回调? 是$(...).append()一个异步调用? 我想不是 ,为什么不写另一个声明呢?

如果你所追求的是避免代码复制,你可以在一个临时变量中创建新的分区:

 for( ... ) { var loader = ...; var newDiv = createDiv( {id:loader.loadInto } ); $('#body').append( newDiv ); $(newDiv).load( loader.url + ' ' + loader.urlSection ); } 

createDiv函数可能看起来像

 function createDiv( settings ) { document.createElement('div'); $(div).class("section"); $(div).id(settings.id); return div; } 

在jquery中,您可以在添加内容代码之后使用$()。 这样,您可以确保在对附加内容执行任何任务之前加载内容并准备好DOM。

 $(function(){ //code that needs to be executed when DOM is ready, after manipulation }); 

$()调用一个函数,该函数注册一个DOM-ready回调函数(如果函数传递给它)或者从DOM返回元素(如果传递一个选择器字符串或元素)

你可以在这里找到更多
jQuery中$和$()之间的差异
http://api.jquery.com/ready/