$(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. minicom 没有tx 信号

    在minicom -s 的配置中:——> Serial port setup -->  选择F - Hardware Flow Control : No默认是yes, 但是没有tx信号输出 ...

  2. 为zend studio增加Extjs代码提示功能

    http://blog.163.com/liuhaijun_83/blog/static/61175622201223114216786/ 需要将其中的http://www.spket.com/upd ...

  3. CentOS无损调整home,root磁盘的大小

    调整硬盘分区大小想增加root空间,减少home空间. 需要说明的是整个操作需要使用root用户. 1.查看硬盘使用情况. [root@Slave1 /]# df -h Filesystem Size ...

  4. SGU132 - Another Chocolate Maniac(状态压缩DP)

    题目大意 给定一个N*M大小的大小的蛋糕,蛋糕的有些地方已经放置了东西,要求你在蛋糕上放入尽量少的1*2大小的巧克力,使得蛋糕不能够再放入巧克力 题解 和POJ1038恰好相反,此题是放入尽量少的巧克 ...

  5. Google Android官方文档进程与线程(Processes and Threads)翻译

    android的多线程在开发中已经有使用过了,想再系统地学习一下,找到了android的官方文档,介绍进程与线程的介绍,试着翻译一下. 原文地址:http://developer.android.co ...

  6. 【C语言】-循环结构-for语句

    for语句: for (表达式1;表达式2;表达式3) { 循环语句 } 表达式1 给循环变量赋初值 表达式2 为循环条件 表达式3 用来修改循环变量的值,称为循环步长. for语句的执行流程: 例: ...

  7. hdoj 1859 最小长方形

    最小长方形 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. [Objective-c 基础 - 2.3] 继承、组合

    A.继承的实现: is a 1.不允许子类.父类存在相同的成员变量 2.方法调用优先原则:子类调用方法的时候,优先从本类寻找,若无则向上在父类中寻找 3.重写:子类重新实现父类的方法,覆盖父类之前的方 ...

  9. iOS 详解NSXMLParser方法解析XML数据方法

    前一篇文章已经介绍了如何通过URL从网络上获取xml数据.下面介绍如何将获取到的数据进行解析. 下面先看看xml的数据格式吧! <?xml version="1.0" enc ...

  10. 1000万条数据导入mysql

    今天需要将一个含有1000万条数据的文本内容插入到数据库表中,最初自然想到的是使用Insertinto '表名'values(),(),()...这种插入方式,但是发现这种方式对1000万条数据量的情 ...