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 相关文章推荐
SWFObject 2.1以上版本语法介绍
Jul 10 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
Aug 11 Javascript
jquery 回车事件实现代码
Aug 23 Javascript
深入理解JavaScript中的对象
Jun 04 Javascript
JS特效实现图片自动播放并可控的效果
Jul 31 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
Apr 15 Javascript
Bootstrap基本组件学习笔记之按钮组(8)
Dec 07 Javascript
js实现手机拍照上传功能
Jan 17 Javascript
基于AGS JS开发自定义贴图图层
Mar 31 Javascript
JavaScript模块化之使用requireJS按需加载
Apr 12 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 Javascript
JS document对象简单用法完整示例
Jan 14 Javascript
多个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
用PHP动态创建Flash动画
2006/10/09 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
php获得网站访问统计信息类Compete API用法实例
2015/04/02 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
用方法封装javascript的new操作符(一)
2010/12/25 Javascript
基于Jquery实现的一个图片滚动切换
2012/06/21 Javascript
JavaScript如何从listbox里同时删除多个项目
2013/10/12 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
2016/05/05 Javascript
浅谈JavaScript中的this指针和引用知识
2016/08/05 Javascript
JavaScript代码执行的先后顺序问题
2017/10/29 Javascript
ES6中javascript实现函数绑定及类的事件绑定功能详解
2017/11/08 Javascript
javascript实现考勤日历功能
2018/11/29 Javascript
详解vue中axios的使用与封装
2019/03/20 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
python计算列表内各元素的个数实例
2018/06/29 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
详解python编译器和解释器的区别
2019/06/24 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
python中栈的原理及实现方法示例
2019/11/27 Python
基于python实现检索标记敏感词并输出
2020/05/07 Python
Django 用户登陆访问限制实例 @login_required
2020/05/13 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
纯HTML5+CSS3制作生日蛋糕代码
2016/11/16 HTML / CSS
移动端html5模拟长按事件的实现方法
2018/09/30 HTML / CSS
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
汽车检测与维修个人求职信
2013/09/24 职场文书
农场厂长岗位职责
2013/12/28 职场文书
初中科学教学反思
2014/01/21 职场文书
2015年物资管理工作总结
2015/05/20 职场文书
校园安全主题班会
2015/08/12 职场文书