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 相关文章推荐
js一组验证函数
Dec 20 Javascript
让div层随鼠标移动的实现代码 ie ff
Dec 18 Javascript
Jquery UI震动效果实现原理及步骤
Feb 04 Javascript
JS对象转换为Jquery对象实现代码
Dec 29 Javascript
jquery操作select详解(取值,设置选中)
Feb 07 Javascript
JavaScript模板引擎用法实例
Jul 10 Javascript
Kindeditor在线文本编辑器如何过滤HTML
Apr 14 Javascript
浅析Bootstrip的select控件绑定数据的问题
May 10 Javascript
ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法
Sep 22 Javascript
switchery按钮的使用方法
Dec 18 Javascript
element-ui tooltip修改背景颜色和箭头颜色的实现
Dec 16 Javascript
vue中可编辑树状表格的实现代码
Oct 31 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 调试利器debug_print_backtrace()
2012/07/23 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
简述php环境搭建与配置
2016/12/05 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
2019/02/25 PHP
PHP实现的文件浏览器功能简单示例
2019/09/12 PHP
保证JavaScript和Asp、Php等后端程序间传值编码统一
2009/04/17 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
jQuery.Callbacks()回调函数队列用法详解
2016/06/14 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
webpack中的热刷新与热加载的区别
2018/04/09 Javascript
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
JavaScript链式调用实例浅析
2018/12/19 Javascript
vue控制多行文字展开收起的实现示例
2019/10/11 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
使用jquery实现轮播图效果
2021/01/02 jQuery
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
Python中字典的setdefault()方法教程
2017/02/07 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
PyQt5内嵌浏览器注入JavaScript脚本实现自动化操作的代码实例
2019/02/13 Python
在PyCharm中实现添加快捷模块
2020/02/12 Python
使用python批量修改XML文件中图像的depth值
2020/07/22 Python
Python运算符+与+=的方法实例
2021/02/18 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
后进生转化工作制度
2014/01/17 职场文书
大学同学聚会邀请函
2014/01/29 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
2014年班主任工作总结
2014/11/08 职场文书
保安2014年终工作总结
2014/12/06 职场文书
技术员个人工作总结
2015/03/03 职场文书
班主任经验交流心得体会
2015/11/02 职场文书
python实现求纯色彩图像的边框
2021/04/08 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL