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 相关文章推荐
基于jquery的simpleValidate简易验证插件
Jan 31 Javascript
jquery引用方法时传递参数原理分析
Oct 13 Javascript
jQuery实现单击和鼠标感应事件
Feb 01 Javascript
jquery实现多屏多图焦点图切换特效的方法
May 04 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
Dec 03 Javascript
jquery判断iPhone、Android设备类型
Sep 14 Javascript
vue组件实现文字居中对齐的方法
Aug 23 Javascript
vue路由嵌套的SPA实现步骤
Nov 06 Javascript
详解如何实现Element树形控件Tree在懒加载模式下的动态更新
Apr 25 Javascript
Vue常用的全选/反选的示例代码
Feb 19 Javascript
解决vue中的无限循环问题
Jul 27 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 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
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
PHP的PDO常用类库实例分析
2016/04/07 PHP
解决jquery的datepicker的本地化以及Today问题
2012/05/23 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
Python设计模式之门面模式简单示例
2018/01/09 Python
Python批量发送post请求的实现代码
2018/05/05 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
2018/07/17 Python
Python理解递归的方法总结
2019/01/28 Python
Python基于opencv实现的简单画板功能示例
2019/03/04 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
TensorFlow实现简单的CNN的方法
2019/07/18 Python
如何基于Python批量下载音乐
2019/11/11 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python读取文件内容为字符串的方法(多种方法详解)
2020/03/04 Python
基于Python的图像阈值化分割(迭代法)
2020/11/20 Python
css3 iphone玻璃透明气泡完美实现
2013/03/20 HTML / CSS
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
HTML5+lufylegend实现游戏中的卷轴
2016/02/29 HTML / CSS
英国电气世界:Electrical World
2019/09/08 全球购物
Oracle里面常用的数据字典有哪些
2014/02/14 面试题
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
经贸韩语专业大学生职业规划
2014/02/14 职场文书
公司合作意向书
2014/04/01 职场文书
赔偿协议书范本
2014/04/15 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
2014年班主任德育工作总结
2014/12/05 职场文书
董事长助理岗位职责
2015/02/11 职场文书
2015年置业顾问工作总结
2015/04/07 职场文书
应急管理工作总结2015
2015/05/04 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
2016年大学生暑期社会实践方案
2015/11/26 职场文书
《家庭教育》读后感3篇
2019/12/18 职场文书
spring boot中nativeQuery的用法
2021/07/26 Java/Android