寻求一个解决jquery延迟的问题

目前造轮子 2015-08-05 11:20:10
问题是这样的,我用jquery 删除掉几个图片和它的父节点。在后面用jquery统计的时候发现还能有这些删除的节点(也就是说后面的JQ执行在这之前或者是没有删除掉节点就执行了后面的JQ),我用 SetTimeout() 延迟可以处理。但是时间需要设置2秒以上,感觉速度很慢,有没有朋友有其他的思路。先谢谢啦


// 删除图片兄弟节点和父父节点
function dropErrorImg(obj){
if(obj.parentNode.nextSibling !== null){
obj.parentNode.nextSibling.remove();
}
$(obj).parent().parent().remove();
}
$(window).load(function() {
gazou_load8(PIC_DOM,STO_BIKE_ID,COMM_TEXT); //加载图片的方法中,如果图片没有的话就删除这个节点
picobj = document.getElementById("picdiv");
if(picobj != null)
{
gazou_load20(PIC_DOM,STO_BIKE_ID,COM_EC_TEXT);
}
});

//这里的方法延迟后处理。
$(window).load(function(){
setTimeout(function(){
if($('.item img').length == 0 && $('.movie_img').length == 0){
document.getElementById("nopicdiv").innerHTML = "<div class='item'><p><img class='allpic' src='http://xx.com/nophoto.jpg' width='100%' </p> </div>";
}
},3500);
});
...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
hch126163 2015-08-06
  • 打赏
  • 举报
回复
是因为 gazou_load8 是异步的???
目前造轮子 2015-08-06
  • 打赏
  • 举报
回复
这个原因 应该是图片加载有延迟,js 中的 图片 onerror 事件对于图片的处理也有延迟。就导致后面的js执行结果跑到 前面js之前
  • 打赏
  • 举报
回复

if($('.item img').length == 0 && $('.movie_img').length == 0){
            document.getElementById("nopicdiv").innerHTML = "<div class='item'><p><img class='allpic'  src='http://xx.com/nophoto.jpg' width='100%' </p> </div>";
        }
你把这段代码放到之后删完节点之后不就行了

if(picobj != null)
    {
        gazou_load20(PIC_DOM,STO_BIKE_ID,COM_EC_TEXT);
    }
if($('.item img').length == 0 && $('.movie_img').length == 0){
            document.getElementById("nopicdiv").innerHTML = "<div class='item'><p><img class='allpic'  src='http://xx.com/nophoto.jpg' width='100%' </p> </div>";
        }
目前造轮子 2015-08-05
  • 打赏
  • 举报
回复
引用 2 楼 gy127132060 的回复:
思维不要僵化,,,为啥偏要先加载再判断。。。楼主应该先判断,,,如果不存在就不进行加载。。。
不能先做判断。因为不加载后返回一个状态就没有判断条件。这个如果要改动的话,程序里改动的东西就太多了。 现在就想一个有没有优化jquery 删除节点的方法,或者是jquery 在删除节点后再执行 接下来的JQ 程序不要用到 settimeout
香蕉猪 2015-08-05
  • 打赏
  • 举报
回复
思维不要僵化,,,为啥偏要先加载再判断。。。楼主应该先判断,,,如果不存在就不进行加载。。。
目前造轮子 2015-08-05
  • 打赏
  • 举报
回复
先沙发撑撑人气
Giberson1 2015-08-05
  • 打赏
  • 举报
回复
这是jquery load缓冲造成得,有两种解决办法: (1)url后+Math.randow()时间戳, (2)设置jquery得全局属性来禁用cache
$(function(){
$.ajaxSetup ({
   cache: false //close AJAX cache
});
};
目前造轮子 2015-08-05
  • 打赏
  • 举报
回复
引用 4 楼 u011376884 的回复:

if($('.item img').length == 0 && $('.movie_img').length == 0){
            document.getElementById("nopicdiv").innerHTML = "<div class='item'><p><img class='allpic'  src='http://xx.com/nophoto.jpg' width='100%' </p> </div>";
        }
你把这段代码放到之后删完节点之后不就行了

if(picobj != null)
    {
        gazou_load20(PIC_DOM,STO_BIKE_ID,COM_EC_TEXT);
    }
if($('.item img').length == 0 && $('.movie_img').length == 0){
            document.getElementById("nopicdiv").innerHTML = "<div class='item'><p><img class='allpic'  src='http://xx.com/nophoto.jpg' width='100%' </p> </div>";
        }
这样做和我之前写的是一样的,还没有 执行完 gazou_load20() gazou_load8()这俩方法 后面的就执行了

87,888

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧