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中valueOf与toString区别浅析
Mar 19 Javascript
JS判断、校验MAC地址的2个实例
May 05 Javascript
jQuery控制TR显示隐藏的三种常用方法
Aug 21 Javascript
BootStrap tooltip提示框使用小结
Oct 26 Javascript
详解JS几种变量交换方式以及性能分析对比
Nov 25 Javascript
bootstrap实现的自适应页面简单应用示例
Mar 09 Javascript
js按条件生成随机json:randomjson实现方法
Apr 07 Javascript
详解Angular 自定义结构指令
Jun 21 Javascript
Element-ui tree组件自定义节点使用方法代码详解
Sep 17 Javascript
深入浅析javascript函数中with
Oct 28 Javascript
javascript数组去重方法总结(推荐)
Mar 20 Javascript
JS使用百度地图API自动获取地址和经纬度操作示例
Apr 16 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静态新闻列表自动生成代码
2007/06/14 PHP
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
PHP数字前补0的自带函数sprintf 和number_format的用法(详解)
2017/02/06 PHP
PHP实现找出有序数组中绝对值最小的数算法分析
2017/08/07 PHP
使用JS或jQuery模拟鼠标点击a标签事件代码
2014/03/10 Javascript
基于jquery实现的树形菜单效果代码
2015/09/06 Javascript
jQuery实现的Tab滑动选项卡及图片切换(多种效果)小结
2015/09/14 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
JS基础随笔(菜鸟必看篇)
2016/07/13 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
使用JS在浏览器中判断当前网络连接状态的几种方法
2017/05/05 Javascript
基于Vue.js实现tab滑块效果
2017/07/23 Javascript
微信小程序中post方法与get方法的封装
2017/09/26 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
vue--vuex详解
2019/04/15 Javascript
简单了解vue中的v-if和v-show的区别
2019/10/08 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
python 连接sqlite及简单操作
2017/06/30 Python
Django+JS 实现点击头像即可更改头像的方法示例
2018/12/26 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python深copy和浅copy区别对比解析
2019/12/26 Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
2020/04/08 Python
家长评语和期望
2014/02/10 职场文书
售房协议书
2014/08/19 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
公司合并协议书范本
2014/09/30 职场文书
2014年个人工作总结模板
2014/12/15 职场文书
水电工岗位职责
2015/02/14 职场文书
活动简报范文
2015/07/22 职场文书
教你怎么用python爬取爱奇艺热门电影
2021/05/20 Python
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技
利用 Python 的 Pandas和 NumPy 库来清理数据
2022/04/13 Python
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS