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中的作用域scope介绍
Dec 28 Javascript
ie支持function.bind()方法实现代码
Dec 27 Javascript
关于IE BUG与字符串截取substr的解决办法
Apr 10 Javascript
jquery遍历checkbox介绍
Feb 21 Javascript
AngularJS基础知识笔记之过滤器
May 10 Javascript
jQuery实现不断闪烁文字的方法
May 15 Javascript
JavaScript实现的多种鼠标拖放效果
Nov 03 Javascript
一个字符串中出现次数最多的字符 统计这个次数【实现代码】
Apr 29 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
Jul 25 Javascript
angularjs中ng-attr的用法详解
Dec 31 Javascript
微信公众号生成新浪短网址的实现(快速生成)
Aug 18 Javascript
JS+DIV实现拖动效果
Feb 11 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 array_merge下进行数组合并的代码
2008/07/22 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
一个JavaScript变量声明的知识点
2013/10/28 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
js面向对象之静态方法和静态属性实例分析
2015/01/10 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
详解JavaScript基于面向对象之创建对象(1)
2015/12/10 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
js实现拖拽功能
2017/03/01 Javascript
原生JavaScript来实现对dom元素class的操作方法(推荐)
2017/08/16 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
JS设计模式之访问者模式定义与用法分析
2018/02/05 Javascript
JavaScript常见继承模式实例小结
2019/01/11 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python读写ini配置文件方法实例分析
2015/06/30 Python
使用Python的Flask框架来搭建第一个Web应用程序
2016/06/04 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
python抖音表白程序源代码
2019/04/07 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
Windows 平台做 Python 开发的最佳组合(推荐)
2020/07/27 Python
北美个性化礼品商店:Things Remembered
2018/06/12 全球购物
护理专业自荐信范文
2014/02/26 职场文书
青春演讲稿范文
2014/05/08 职场文书
主题党日活动总结
2014/07/08 职场文书
2015年药店工作总结
2015/04/20 职场文书
初中生物教学随笔
2015/08/15 职场文书
python爬取网页版QQ空间,生成各类图表
2021/06/02 Python
gateway与spring-boot-starter-web冲突问题的解决
2021/07/16 Java/Android
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript