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 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
javascript 去字符串空格终极版(支持utf8)
Nov 14 Javascript
IE浏览器不支持getElementsByClassName的解决方法
Aug 27 Javascript
JS常用函数使用指南
Nov 23 Javascript
3种js实现string的substring方法
Nov 09 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
Jan 26 Javascript
js去字符串前后空格的实现方法
Feb 26 Javascript
JavaScript性能优化总结之加载与执行
Aug 11 Javascript
JS正则匹配中文的方法示例
Jan 06 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
vue仿ios列表左划删除
Sep 26 Javascript
vue中添加与删除关键字搜索功能
Oct 12 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生成自己的LOG文件
2006/10/09 PHP
php 短链接算法收集与分析
2011/12/30 PHP
Yii 快速,安全,专业的PHP框架
2014/09/03 PHP
PHP实现阳历到农历转换的类实例
2015/03/07 PHP
php实现字符串翻转的方法
2015/03/27 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
PHP反射实际应用示例
2019/04/03 PHP
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
jQuery取得select选择的文本与值的示例
2013/12/09 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
AngularJS入门教程之Select(选择框)详解
2016/07/27 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
浅谈react-router HashRouter和BrowserRouter的使用
2017/12/29 Javascript
浅谈微信页面入口文件被缓存解决方案
2018/09/29 Javascript
JS实现数组去重及数组内对象去重功能示例
2019/02/02 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
JS手写一个自定义Promise操作示例
2020/03/16 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
[02:02]DOTA2英雄基础教程 斯拉达
2013/12/11 DOTA
python 查找文件夹下所有文件 实现代码
2009/07/01 Python
python发送邮件脚本
2018/05/22 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
python 爬虫 实现增量去重和定时爬取实例
2020/02/28 Python
财务负责人任命书
2014/06/06 职场文书
房产协议书范本2014
2014/09/30 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
未中标通知书
2015/04/17 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书
毕业证明书
2015/06/19 职场文书
初中班级口号霸气押韵
2015/12/24 职场文书
党员干部学习三严三实心得体会
2016/01/05 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python
MySQL中order by的使用详情
2021/11/17 MySQL