Jquery:是否有类似于$(document).ready()的基于元素的方法
Jquery: Is there an element based method similar to $(document).ready()?
是否有类似于$(document).ready()
的方法可以应用到任意元素?例如,如果ajax调用设置了内容一个DIV
,包括很多IMG
标签,有没有办法触发当所有图像都完成加载时调用函数?某物沿着以下路线:
$.ajax({
url: '/get/my/page.php',
dataType: "html",
success: function(response)
{
$('#my_element').html(response);
$('#my_element').ready(function() {alert('all images loaded');});
}
});
谢谢你的建议。
如果您对正在加载的图像特别感兴趣,那么您可以尝试imagesLoaded,它似乎涵盖了您提到的示例案例。
与$("document").ready()相同--不,但是,有一些方法可以使其工作:
-
将需要执行的任何函数作为
callback
放入AJAX调用:$.get("link.php?item=1", function() { //callback function here })
-
您可以有一个onchange事件侦听器,它在div被更改时触发,并且您可以在加载一定数量的元素后专门触发一个函数:
$("#div").on('change', function() { if ( $("#div").length > DESIRED_NUMBER_OF_ELEMENTS + 1) { //Execute function here } })
on('change')可以用任何你想要的方式:它可以根据元素的数量、内部元素的性质(如果是图像、链接、另一个div等)以及你能想到的任何东西触发函数。
沿着这些线的某些东西应该可以做你想做的事。
onImagesLoaded('#my_element img',function(){
console.log('images have all loaded')
});
function onImagesLoaded(seletor,callback){
var $images = $(seletor);
var count = $images.length;
$images.each(function(img){
//create an image
var tempImage = new Image();
//set a function for the onload event
tempImage.onload = function(){
count--;
//if the count is 0 it means all images are done loading
if(count===0){
callback();
}
};
//set the source to the src of the image.
tempImage.src = $(img).attr('src');
});
}
尝试
var request = $.ajax({url: "/get/my/page.php", dataType: "html"});
request.done(function (data, textStatus, jqxhr) {
// parse returned `data` string for html
var html = $.parseHTML(data),
//
len = html.length,
div = $("div");
// do stuff when all images loaded into `div`
div.on("imgsready", function(e, htmlimgs, divimgs) {
console.log("ready", htmlimgs, divimgs);
$(e.target).prepend(divimgs + " images ready<br>" )
});
// set `div` html contents to `html` string
$.when(div.html(html)
// return image `on` `load` event
, $("img", div)
.load(function(e) {
// return image `promise` object
return $(e.target).promise()
})
)
.then(function (el, i) {
// if `div` contains `len` length images , call `imgsready` event
return el.children(i).length === (i.length && len)
&& el.children(i).eq(len -1).is("*")
? el.trigger("imgsready", [len, i.length])
// else check again in 1000ms
: setTimeout(function() {
el.children(i).eq(len -1).is("*") ?
el.trigger("imgsready", [len, i.length])
: console.log(el.children(i).length)
},1000)
});
});
jsfiddlehttp://jsfiddle.net/guest271314/vhuaen71/
相关文章:
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- javascript在html元素方法运行setTimeout后返回此消息
- 如何使用javascript检查事件是否应用于元素
- 使用jQuery相对于元素的位置滑动元素
- 将随机类应用于元素
- 循环使用CSS规则遍历数组,并将它们应用于元素
- 使用 JavaScript 动态地专注于元素
- 如何在 motools 中使用元素方法变形或补间延迟或设置杜累
- 有没有办法查看相当于jQuery方法的vanilla JavaScript
- jQuery将侦听器应用于元素集
- 如何在 Javascript 中使用元素的 CSS 路径将 CSS 属性应用于元素
- 直接应用于元素的样式在移入 时将丢失.CSS 文件
- Rails 和特定于元素的 JavaScript
- 将预定义的颜色序列应用于元素的动态列表
- 使插件特定于元素
- Jquery toggleClass应用于元素时不起作用
- JavaScript获取当前应用于元素的样式列表
- 如何返回外部样式表类应用于元素的所有CSS属性(不获取计算样式!)
- Safari javascript错误,试图定义“;删除“;元素方法
- 自定义jQuery方法独立作用于元素的每个实例