经过JQuery的.html()函数咱们能够很是方便地加载一段HTML到指定的元素中,例如给<div></div>中放入一组图片。问题是JQuery的.html()函数是同步的,若是咱们想知道HTML被加载以后容器的高,例如获取容器的offsetHeight或scrollHeight属性的值,必需要等HTML元素中全部的内容都加载完毕后才能获取到真实的值,尤为是HTML中包含有image标签时。那如何才能实现.html()函数的回调方法呢?答案是使用前端的Q.html
对应的代码以下:前端
var defer = Q.defer(); var realHtml = $('#html-canvas'); realHtml.html(html); var contentImages = $("#html-canvas img"); var totalImages = contentImages.length; var loadedImages = 0; if (contentImages.length === 0) defer.resolve(); else { contentImages.each(function(){ $(this).on('load', function(){ loadedImages++; if(loadedImages == totalImages) { defer.resolve(); } }); }); } return defer.promise.then(function () { console.log('all done.'); });
首选经过JQuery选择器找到容易中已加入HTML的全部img元素,而后给全部img元素添加onLoad事件,并判断是否全部img元素的onLoad事件是否都已经触发(loadedImages == totalImages)。而后经过defer.resolve()来通知Q的promise已完成异步操做,而后在.then()函数中就能够继续下一步操做了。git