$(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()与避免冲突的更多相关文章

  1. 读jQuery官方文档:jQuery对象

    jQuery对象 当用$符号包裹一个CSS风格选择器的时候,你得到一个jQuery对象. var heading = $('h1'); jQuery对象是对DOM ELement封装过后的数组.注意, ...

  2. 读jQuery官方文档:数据方法与辅助方法

    数据方法 有时候你可能想要在元素上面储存数据.由于浏览器兼容性问题,用原生JavaScript处理元素上的数据可能会造成内存溢出,jQuery可以帮你自动处理这些问题: //储存和取出元素数据 $(' ...

  3. 读jQuery官方文档:样式

    样式 使用jQuery,无论是设置或者获取元素样式都十分简便. // 支持驼峰式和分割线式,两种方式等价(原生JavaScript只支持驼峰式) $('h1').css('fontSize'); $( ...

  4. 读jQuery官方文档:遍历

    遍历 jQuery的快捷遍历方法可以快速定位到想要的元素.查找祖先元素 html<div class="grandparent"> <div class=&quo ...

  5. [转]Commons IO 官方文档

    原文地址:http://ifeve.com/commons-io/ 本文翻译自 Commons IO 官方文档 译者:MagicWolf Common IO 是一个工具库,用来帮助开发IO功能 它包括 ...

  6. js进阶 10-3 jquery中为什么用document.ready方法

    js进阶 10-3  jquery中为什么用document.ready方法 一.总结 一句话总结: 1.document.ready和window.onload的区别:用哪个好? document. ...

  7. jQuery 函数位于一个 document ready 函数中

    在我们的实例中的所有 jQuery 函数位于一个 document ready 函数中: $(document).ready(function(){ --- jQuery functions go h ...

  8. 转:jquery的$(function(){})和$(document).ready(function(){}) 的区别

    原文链接:https://www.cnblogs.com/slyzly/articles/7809935.html [转载]jquery的$(function(){})和$(document).rea ...

  9. JVM - Java虚拟机规范官方文档

    Java虚拟机规范官方文档    

随机推荐

  1. UVALIVE 3026 Period

    题意:给你一个字符串,问第i位前是否有循环节,若存在,则循环节是多少? 思路:考察失配函数f[i]的意义.只要i%(i-f[i])==0,则循环节长度为i/(i-f[i]).字符在[0,f[i]],[ ...

  2. ADB Server Didn’t ACK ,failed to Start Daemon 解决方法

    解决方法如下: 1.adb nodaemon server 查看不能执行的原因,输出: cannot bind ‘tcp:5037’ 2.定位到了是端口的问题!是5037端口被占用了! 3.netst ...

  3. stm32f10x.h文件分析理解

    今天再看过半年前自己写的这篇发现自己当时理解有误,stm32f10x.h与库开发并未存在太大关系,只是一个最为重要的寄存器地址到寄存器结构体变量的映射. stm32f10x.h 这个头文件是STM32 ...

  4. nyoj 49 开心的小明

    开心的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天 ...

  5. UVA 10779 Collectors Problem(最大流)

    这个题是很难往网络流上面构思的... 从s向每个物品增加容量为Bob拥有数的弧,然后从每个物品向t增加容量为1的弧(代表种类个数).这时候跑最大流的话,得到的肯定是Bob拥有的初始种类数.那么交换后的 ...

  6. android widget的中文文档

    下文是我翻译于 App Widgets的文章,如果有不当之处请大家指出 app widget是一种嵌入在其他应用(例如主屏幕)和并且能偶接受间接性更新的小应用,你可以自己提供app widget pr ...

  7. 本地或者是koala软件编译less文件为css

    背景: 事情的起因是这般的,平时工作是在线上办公,样式是使用less来写,于是乎,这样我从线上download下来的less文件无法直接在自己的本地环境运行.有一个问题就是我要把less文件先编译成c ...

  8. 【转】简明vim练级攻略

    本文来自:http://coolshell.cn/articles/5426.html vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一 ...

  9. 逗号分隔字符串转换为一张表--解决查询in(逗号分隔字符串)出错问题

    CREATE PROCEDURE [dbo].[Pro_TEST] AS BEGIN ) ) SET @split=',' SET @c='025,023,014,015' )) ) BEGIN IN ...

  10. [017]string类使用注意事项

    最近自己写着玩,写了一个这样的函数: void foo(const string& iStr) { ; i < iStr.length(); ++i) { string str = iS ...