JQuery学习笔记

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(); //将$控制权移交出去,以前使用$的地方都改用jQuery
jQuery(document).ready(function () {
    alert(jQuery("#span1").html());
});

方法还有很多,摘自网络,方法暂不明确

//方式2
var $j=jQuery.noConflict(); //定义快捷方式
$j(document).ready(function () {
    alert($j("#span1").html());
});
//方式3
jQuery.noConflict(); //在函数内部继续使用$
jQuery(function ($) {
    alert($("#span1").html());
});
//方式4
jQuery.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;
    })

 

posted @ 2015-01-19 22:59  Nmoand  阅读(212)  评论(0编辑  收藏  举报