追加后的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
为什么回调? 是$(...).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/