读jQuery官方文档:$(document).ready()与避免冲突
$(document).ready()
通常你想在DOM结构加载完毕之后才执行相关脚本。使用原生JavaScript,你可能调用window.onload = function() { ... }, 但是这个办法的你只能够调用一次,而且需要等DOM结构完全加载完毕,包括图片样式等静态文件所有夹在完毕才会开始执行onload函数里面的代码。
jQuery中提供了一种更好的办法:
$(document).ready(function() {
console.log('ready!');
});
与onload函数不同的是,这个办法可以被调用无限多次,而且不需要等待页面元素完全下载完毕才执行代码,即DOM结构渲染完毕后马上执行代码。
你可能见过一些经验丰富的开发者使用下面的简写形式:
$(function() {
console.log('ready!');
});
除了传递匿名函数,你也可以选择传递命名函数:
function readyFn(jQuery) {
//do something...
}
$(document).ready(readyFn);
//或者:
$(window).load(readyFn);
避免与其他库冲突
1、No-Conflict模式
jQuery库是被包含在jQuery全局变量中的,而$是jQuery的快捷方式,也就是$默认也是全局变量。如果你在使用其他包含$全局变量的库(如prototype,YUI),你可能面临变量名冲突,不过jQuery提供了避免这种冲突的办法。
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
var $j = jQuery.noConflict();
//现在$不再是jQuery的别名,$j替换了$成为了jQuery的新别名
$j(document).ready(function() {
$j('div').hide();
});
//现在$是prototype的别名
window.onload = function() {
var mainDiv = $('main');
};
</script>
上面的代码中的$会回复到它本身的库的用途。你依然可以通过jQuery或者$j的方式使用jQuery库。你可以随意更改jQuery的别名, 比如`jq', '$J', 'awesomeQuery'等。
另外,如果你不想给jQuery命名新的别名(你依然想要用$),你依然有办法可以避免冲突。
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
jQuery( document ).ready(function( $ ) {
//这个作用域里的$都是jQuery的别名
$('div').hide();
});
//全局作用域的$是prototype的
window.onload = function() {
var mainDiv = $('main');
};
</script>
这些技巧基本上可以完成日常需求了。
2、 引入其他库之前引入jQuery
在其他库前引入jQuery,你需要使用jQuery来调用jQuery库,$别称属于其他库。
<script src="jquery.js"></script>
<script src="prototype.js"></script>
//通过jQuery全称调用jQuery库
jQuery(document).ready(function() {
jQuery('div').hide();
});
//由于prototype在jQuery之后引入,$别名属于prototype
window.onload = function() {
var mainDiv = $('main');
};
3、 总结
创建新别名:
jQuery.noConflict()方法做了两件事,一是返回了jQuery对象的引用,你可以用来赋值给自定义的变量,如($jq);二是,删除了默认的$别称,把$别名归还给其他库:
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
//将$别名归还prototype,创建一个新的别名$jq
var $jq = jQuery.noConflict();
</script>
使用立即调用函数表达式:
你可以创建一个立即调用函数表达式,然后在表达式里使用$作为jQuery的别名:
<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();
(function( $ ) {
$('div').remove();
})( jQuery );
</script>
注意,如果你使用这个技巧,你将不能够在立即调用函数表达式里面使用$作为prototype的别名。
给jQuery(document).ready()传递参数:
<script src="jquery.js"></script>
<script src="prototype.js"></script>
<script>
jQuery(document).ready(function( $ ) {
//do something...
});
</script>
或者
<script src="jquery.js"></script>
<script src="prototype.js"></script>
<script>
jQuery(function( $ ) {
//do something...
});
</script>
读jQuery官方文档:$(document).ready()与避免冲突的更多相关文章
- 读jQuery官方文档:jQuery对象
jQuery对象 当用$符号包裹一个CSS风格选择器的时候,你得到一个jQuery对象. var heading = $('h1'); jQuery对象是对DOM ELement封装过后的数组.注意, ...
- 读jQuery官方文档:数据方法与辅助方法
数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...
- 读jQuery官方文档:样式
样式 使用jQuery,无论是设置或者获取元素样式都十分简便. // 支持驼峰式和分割线式,两种方式等价(原生JavaScript只支持驼峰式) $('h1').css('fontSize'); $( ...
- 读jQuery官方文档:遍历
遍历 jQuery的快捷遍历方法可以快速定位到想要的元素.查找祖先元素 html<div class="grandparent"> <div class=&quo ...
- [转]Commons IO 官方文档
原文地址:http://ifeve.com/commons-io/ 本文翻译自 Commons IO 官方文档 译者:MagicWolf Common IO 是一个工具库,用来帮助开发IO功能 它包括 ...
- js进阶 10-3 jquery中为什么用document.ready方法
js进阶 10-3 jquery中为什么用document.ready方法 一.总结 一句话总结: 1.document.ready和window.onload的区别:用哪个好? document. ...
- jQuery 函数位于一个 document ready 函数中
在我们的实例中的所有 jQuery 函数位于一个 document ready 函数中: $(document).ready(function(){ --- jQuery functions go h ...
- 转:jquery的$(function(){})和$(document).ready(function(){}) 的区别
原文链接:https://www.cnblogs.com/slyzly/articles/7809935.html [转载]jquery的$(function(){})和$(document).rea ...
- JVM - Java虚拟机规范官方文档
Java虚拟机规范官方文档
随机推荐
- UVALIVE 3026 Period
题意:给你一个字符串,问第i位前是否有循环节,若存在,则循环节是多少? 思路:考察失配函数f[i]的意义.只要i%(i-f[i])==0,则循环节长度为i/(i-f[i]).字符在[0,f[i]],[ ...
- ADB Server Didn’t ACK ,failed to Start Daemon 解决方法
解决方法如下: 1.adb nodaemon server 查看不能执行的原因,输出: cannot bind ‘tcp:5037’ 2.定位到了是端口的问题!是5037端口被占用了! 3.netst ...
- stm32f10x.h文件分析理解
今天再看过半年前自己写的这篇发现自己当时理解有误,stm32f10x.h与库开发并未存在太大关系,只是一个最为重要的寄存器地址到寄存器结构体变量的映射. stm32f10x.h 这个头文件是STM32 ...
- nyoj 49 开心的小明
开心的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天 ...
- UVA 10779 Collectors Problem(最大流)
这个题是很难往网络流上面构思的... 从s向每个物品增加容量为Bob拥有数的弧,然后从每个物品向t增加容量为1的弧(代表种类个数).这时候跑最大流的话,得到的肯定是Bob拥有的初始种类数.那么交换后的 ...
- android widget的中文文档
下文是我翻译于 App Widgets的文章,如果有不当之处请大家指出 app widget是一种嵌入在其他应用(例如主屏幕)和并且能偶接受间接性更新的小应用,你可以自己提供app widget pr ...
- 本地或者是koala软件编译less文件为css
背景: 事情的起因是这般的,平时工作是在线上办公,样式是使用less来写,于是乎,这样我从线上download下来的less文件无法直接在自己的本地环境运行.有一个问题就是我要把less文件先编译成c ...
- 【转】简明vim练级攻略
本文来自:http://coolshell.cn/articles/5426.html vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一 ...
- 逗号分隔字符串转换为一张表--解决查询in(逗号分隔字符串)出错问题
CREATE PROCEDURE [dbo].[Pro_TEST] AS BEGIN ) ) SET @split=',' SET @c='025,023,014,015' )) ) BEGIN IN ...
- [017]string类使用注意事项
最近自己写着玩,写了一个这样的函数: void foo(const string& iStr) { ; i < iStr.length(); ++i) { string str = iS ...