1.$
针对我一直不理解的为什么jQuery里面在文档任意位置写一个$就可以执行,而原生的必须写到window.onload里面才可以,否则就是全局变量了,当时我也考虑过每次都要写在window.onload里面,一个界面只能写一个window.onload呀,这样岂不是很麻烦?
window.onload
必须等到页面内包括图片的所有元素加载完毕后才能执行,$(document).ready()
是DOM结构绘制完毕后就执行,不必等到加载完毕window.onload
不能同时编写多个,如果有多个window.onload
方法,只会执行一个,$(document).ready()
可以同时编写多个,并且都可以得到执行window.onload
没有简化写法,$(document).ready(function(){})
可以简写成$(function(){})
查了下ready()方法,里面这样说
(1)这个方法纯粹是对向window.load事件注册事件的替代方法。通过使用这个方法,可以在DOM载入就绪能够读取并操纵时(也就是说,不会等待页面中的图片等资源加载完毕)立即调用你所绑定的函数
(2)而且请确保在 <body> 元素的onload事件中没有注册函数,否则不会触发+$(document).ready()事件
(3)可以在同一个页面中无限次地使用$(document).ready()事件。其中注册的函数会按照(代码中的)先后顺序依次执行。
(4)$(document).ready
可简写为$(...)
,同时内部的 jQuery 代码依然使用 $ 作为别名,而不管全局的 $ 为何。
《我想知道jQuery的$如何把所有的函数统一放到window.onload里面的,而且如何做到在DOM加载完成后执行而不是window.onload后执行》
2.解决冲突
有时会有jQuery和其他的库或自己写的一些公共脚本文件一起使用的场景,就有可能会出现$冲突的问题
解决方法很多,最常用的方式是:
jQuery.noConflict(); //将$控制权移交出去,以前使用$的地方都改用jQueryjQuery(document).ready(function () { alert(jQuery("#span1").html());});
方法还有很多,摘自网络,方法暂不明确
//方式2var $j=jQuery.noConflict(); //定义快捷方式$j(document).ready(function () { alert($j("#span1").html());});
//方式3jQuery.noConflict(); //在函数内部继续使用$jQuery(function ($) { alert($("#span1").html());});
//方式4jQuery.noConflict(); //在函数内部继续使用$另一种方式(function ($) { $(function(){ alert($("#span1").html()); });})(jQuery);
针对于解决冲突的代码查看了源码 jQuery.noConflict()
jQuery.extend({ noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; })