美文网首页我爱编程
<jQuery>总结:知识点

<jQuery>总结:知识点

作者: 玉圣 | 来源:发表于2018-05-26 17:56 被阅读17次

一、jQuery基础和原理:

1、jQuery的本质是一个闭包:
        (function( window, undefined ) {
            //.....
        })(window);

闭包:一种立即执行的函数

        //方式一
        function test1() {
            var x = 10;
            console.log(x);   //结果是 10
        }

        test1();

        //------------------------------

        //方式二
        (function test1() {
            var x = 10;
            console.log(x);   //结果是 10
        })();

说明:
方式一和方式二的效果是一样的,其中就是将test1(); 中的函数名test1替换为上面定义的函数,两者是等同的

2、jQuery为什么要使用闭包来实现:

1.1、原因:
为了避免多个框架的冲突
1.2、解释:
导入jQuery的框架:<script src="js/jquery-1.12.4.js"></script> 就相当于将js代码拷贝到当前页面中,因此在框架中定义的变量,有可能会和其他框架定义的变量相同,而产生被覆盖的可能。而由于在闭包中定义变量,变量的作用域就只是在当前闭包函数中,就可以解决别其他框架覆盖的可能。

        function test1() {
            //自身框架定义的变量
            var num = 1;

            //其他框架定义的变量,会覆盖上面定义的num
            var num = 2;

            console.log(num);   //结果是 2
        }

        test1();
3、jQuery如何让外界访问内部定义的局部变量:

在函数内部,将变量赋值给window存放,这样就可以通过window拿到函数内部的变量使用了
1.1、例如:
window.xxx = xxx;
1.2、jQuery内部做法:

        (function( window, undefined ) {
            var jQuery = function () {
                return new jQuery.fn.init();
            };

            window.jQuery = window.$ = jQuery;
        })(window);
4、jQuery为什么要给自己传递一个window参数(在最后的括号中的window):

1.1、为了方便后期压缩代码
压缩代码是为了减少传输量,加载更快
在压缩版本中,其中的所有参数都会被改成简写变量,如window就会变为e,类似如下样式

        (function(e, undefined) {
            var jQuery = function () {
                return new jQuery.fn.init();
            };

            e.jQuery = e.$ = jQuery;
        })(window);

这时,如果不传入window参数,那其中的e,并不知道是什么含义,而传入一个window参数,就可以明确其中的e就是传入的window
1.2、为了提升查找的效率
如果不传入window参数,在作用域中使用window的时候,就需要到外层作用域中去查找,没有找到的话,就会接着到再上一层查找,直到在作用域链中找到为止。
因此,为了查找效率,直接使用传入的参数,而无需到外层作用域去查找。

        var param = 1;
        function p1() {
            var param = 10; //注释此行,打印上一层的param,结果为10
            function p2() {
                var param = 20; //注释此行,打印上一层的param,结果为10
                function p3() {
                    var param = 30; //注释此行,打印上一层的param,结果为20
                    console.log(param);
                }
            }
        }
5、jQuery为什么要给自己接受一个undefined参数:

1.1、为了方便后期压缩代码
1.2、在IE9一下的浏览器中,undefined可以被修改,为了保证内部使用的undefined不被修改,所以需要接受接收一个正确的undefined

       undefined = 998;
       console.log(undefined); //结果为undefined,IE9以下可能为998
6、jQuery的原型对象处理
        (function( window, undefined ) {
            var jQuery = function () {
                //等价于new jQuery.prototype.init();
                return new jQuery.fn.init();
            };

            //......

            //jQuery.fn中的fn就是prototype
            jQuery.fn = jQuery.prototype;

            //......

            jQuery.prototype = {
                constructor: jQuery
            };

            /*
            init的原型对象指向了jQuery的原型对象,所以就可以不用
            手动在调用init方法了,直接在创建jQuery的对象时,就同时给init赋值了。
             */
            jQuery.prototype.init.prototype = jQuery.prototype;

            //......

            window.jQuery = window.$ = jQuery;
        })(window);

二、函数:

1、holdReady(b)方法:

  • 作用:暂停或开始执行ready方法

示例:

<button id="btn">点我啊</button>
<script>
    $.holdReady(true);

    $(document).ready(function () {
        alert("helow jQuery!")
    });

    $("#btn")[0].onclick = function () {
        $.holdReady(false);
    };

</script>

三、事件:

1、jQuery阻止事件冒泡和默认行为的方式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery事件</title>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        $(function () {
            $("#father").click(function () {
                alert("father");
            });

            //阻止事件冒泡 方式一:
            $("#btn1").click(function () {
                alert("click");
                return false;
            });
            //阻止事件冒泡 方式二:
            $("#btn1").click(function (event) {
                alert("click");
                event.stopPropagation();
            });

            //阻止事件默认行为 方式一:
            $("#a1").click(function () {
                alert("click");
                return false;
            });
            //阻止事件默认行为 方式二:
            $("#a1").click(function (event) {
                alert("click");
                event.preventDefault();
            });

        });
    </script>
</head>
<body>
<div id="father" style="width: 100px; height: 100px; background-color: red;">
    <button id="btn1">点我啊</button>
</div>
<a id="a1" href="https://www.baidu.com/">百度一下</a>
</body>

2、jQuery事件自动触发:

1.1、使用方式:
”通过使用trigger(event)triggerHandler(event); 可以自动触发事件

            $("#btn1").click(function () {
                alert("click");
            });

            //方式一:
            $("#a1").trigger("click");
            
            //方式二:
            $("#a1").triggerHandler("click");

1.2、区别:

  • trigger 如果利用trigger自动触发事件,会触发事件冒泡和默认行为
  • triggerHandler 如果利用triggerHandler会自动触发事件,不会触发事件冒泡和默认行为
    1.3、特殊情况:
    对于 <a> 标签,如果使用trigger,则不会触发默认行为(仅为默认行为,事件冒泡会不影响)
  • 需求:
    如果需要让a标签自动触发默认行为,则可以使用如下方式:
    即在a标签中包裹一层span标签,将自动触发的事件加在span上即可。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery事件</title>
    <script src="js/jquery-1.12.4.js"></script>
    <script>
        $(function () {

            $("#aFather").click(function () {
                alert("aFather");
            });
            $("#span").click(function () {
                alert("click");
            });
            $("#span").trigger("click");
        });

    </script>
</head>
<body>
<div id="aFather" style="width: 100px; height: 100px; background-color: blue;">
    <a id="a1" href="https://www.baidu.com/"><span id="span">百度一下</span></a>
</div>
</body>
</html>

相关文章

  • <jQuery>总结:知识点

    一、jQuery基础和原理: 1、jQuery的本质是一个闭包: 闭包:一种立即执行的函数 说明:方式一和方式二的...

  • <jQuery>总结:注意点

    一、函数方法 1、静态函数的使用 1、jQuery中的each静态方法和mao静态方法的区别 1.1 返回值的不同...

  • <Bootstrap>总结:知识点

    一、Bootstrap的基础 1、简介和集成使用 1.1、简介: Bootstrap是一个神奇的前端UI框架 是t...

  • <JavaScript>总结:知识点

    一、网页中的相关属性和参数使用: 1、获取的当前网页的路径: 2、获取网页的域名: 3、hash:需求:如果页面中...

  • <CSS>总结:知识点

    一、引入: 1、站点图标(logo)的引入 在HTML中的 标签中,通过link进行引入 快捷方式:link:f...

  • <Ajax>总结:知识点

    一、Ajax的基础: 1、使用步骤 1.1、步骤: 创建一个异步对象 设置请求方式和请求地址 发送请求 监听状态的...

  • iOS知识点总结<一>

    1、堆和栈的区别 (1)堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存(2)栈空间的内存有系统自动分...

  • iOS知识点总结<四>

    1、请简述什么是主键、什么是外键 主键: 一张表(关系)的一个列(睡醒)或多个列可以作为主键,但是前提是让这个列作...

  • iOS知识点总结<二>

    1、UITableView复用机制: UITableView通过重用单元格来达到节省内 存的目的:通过为每...

  • Read a story

    This is a lion. lt's big. lt's strong. lt has big teeth. ...

网友评论

    本文标题:<jQuery>总结:知识点

    本文链接:https://www.haomeiwen.com/subject/ghnmjftx.html