jQuery下实现等待指定元素加载完毕(可改成纯js版)


Posted in Javascript onJuly 11, 2013

先声明下这个方法的使用场合,以免误导大家。
比如在博客园,我们没法修改他的源代码,
那么只能想办法监视元素的出现了。
所以下面方法是在修改不了源码的情况下使用,而非写自己的项目。

今天在改博客几个样式的时候,以为很自然的加上js就可以实现了,
没想到那个是ajax加载的数据,而非页面首次加载的,
比如下面的 “提交评论” 按钮,右侧的 搜索按钮 等。
我很自然的写了

1 $("#btn_comment_submit").removeClass("comment_btn").addClass("btn"); //提交按钮 
2 $(".div_my_zzk").addClass("input-append"); //搜索框 
3 $(".btn_my_zzk").removeClass("btn_my_zzk").addClass("btn"); //搜索按钮

可是刷新页面后发现有点不对,看了 network 后发现是 ajax 过来的,
无奈,除了自己写模版之外,只能自己想办法修改代码了。

那么下面就是我想到的等待元素出现方法。
虽然是基于 jQuery 的,但是代码很简洁,可以修改成纯js版的。

jQuery.fn.wait = function (func, times, interval) { 
var _times = times || -1, //100次 
_interval = interval || 20, //20毫秒每次 
_self = this, 
_selector = this.selector, //选择器 
_iIntervalID; //定时器id 
if( this.length ){ //如果已经获取到了,就直接执行函数 
func && func.call(this); 
} else { 
_iIntervalID = setInterval(function() { 
if(!_times) { //是0就退出 
clearInterval(_iIntervalID); 
} 
_times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 
if( _self.length ) { //判断是否取到 
func && func.call(_self); 
clearInterval(_iIntervalID); 
} 
}, _interval); 
} 
return this; 
}

使用方法当然也很简单,只有3个参数。
func 是回调函数,就是当指定元素出现后就执行的函数。
times 是检测次数,默认是-1,一直检测直到出现为止。
interval 是检测间隔,默认 20 毫秒一次。

我们修改下之前的代码

$("#btn_comment_submit").wait(function() { //等待#btn_comment_submit元素的加载 
this.removeClass("comment_btn").addClass("btn"); //提交按钮 
//这里的 this 就是 $("#btn_comment_submit") 
}); $("#widget_my_zzk").wait(function() { //等待#widget_my_zzk元素的加载 
$(".div_my_zzk").addClass("input-append"); //搜索框 
$(".btn_my_zzk").removeClass("btn_my_zzk").addClass("btn"); //搜索按钮 
});

是不是很简单、、

当然,依然不破坏jQuery的链式结构,你依然可以 $("#id").wait(function(){}).hide();
但是后来想想,元素都没加载,继续链下去也没意义,不过算了,不改了,就这样吧。呵呵 :-)

最后说点,,我经验尚浅,如果那里写的不对,还请各位大侠指点。

Javascript 相关文章推荐
Javascript 自适应高度的Tab选项卡
Apr 05 Javascript
JavaScript基于setTimeout实现计数的方法
May 08 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
Apr 15 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
Vue.js实现多条件筛选、搜索、排序及分页的表格功能
Nov 24 Javascript
AngularJS解决ng-if中的ng-model值无效的问题
Jun 21 Javascript
Angularjs按需查询实例代码
Oct 30 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
Jan 02 Javascript
Vue filter介绍及详细使用
Apr 04 Javascript
jQuery使用bind动态绑定事件无效的处理方法
Dec 11 jQuery
Js视频播放器插件Video.js使用方法详解
Feb 04 Javascript
jQuery实现的移动端图片缩放功能组件示例
May 01 jQuery
多个datatable共存造成多个表格的checkbox都被选中
Jul 11 #Javascript
JS 添加千分位与去掉千分位的示例
Jul 11 #Javascript
在js文件中如何获取basePath处理js路径问题
Jul 10 #Javascript
使用闭包对setTimeout进行简单封装避免出错
Jul 10 #Javascript
js Map List 遍历使用示例
Jul 10 #Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 #Javascript
JS下拉框内容左右移动效果的具体实现
Jul 10 #Javascript
You might like
香妃
2021/03/03 冲泡冲煮
php递归创建和删除文件夹的代码小结
2012/04/13 PHP
php短址转换实现方法
2015/02/25 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
使用PHP开发留言板功能
2019/11/19 PHP
JAVASCRIPT  THIS详解 面向对象
2009/03/25 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
javascript中AJAX用法实例分析
2015/01/30 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
Javascript调试之console对象——你不知道的一些小技巧
2017/07/10 Javascript
微信小程序配置服务器提示验证token失败的解决方法
2019/04/03 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
Python 变量类型及命名规则介绍
2013/06/08 Python
进一步理解Python中的函数编程
2015/04/13 Python
python fabric使用笔记
2015/05/09 Python
Python实现公历(阳历)转农历(阴历)的方法示例
2017/08/22 Python
Python常见的pandas用法demo示例
2019/03/16 Python
python字符串反转的四种方法详解
2019/12/02 Python
python定义类self用法实例解析
2020/01/22 Python
美体小铺波兰官方网站:The Body Shop波兰
2019/09/03 全球购物
哈理工毕业生的求职信
2013/12/22 职场文书
摄影专业毕业生求职信
2014/03/13 职场文书
法人授权委托书格式
2014/04/08 职场文书
工会换届选举方案
2014/05/21 职场文书
连锁超市项目计划书
2014/09/15 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2015年考研复习计划
2015/01/19 职场文书
死亡诗社观后感
2015/06/05 职场文书
导游词之开封禹王台风景区
2019/12/02 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python
python中 .npy文件的读写操作实例
2022/04/14 Python