【前端系列教程之jQuery】04_jQuery队列控制、插件机制、多库共存

一、jQuery对象访问

each(callback)

        以每一个匹配的元素作为上下文来执行一个函数。

        意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整型)。 返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')。

        参数:
                callback        对于每个匹配的元素所要执行的函数
        注:回调函数里面可以传递两个参数,第一个参数是表示从0开始进行迭代的数值;第二个表示的就是this对象;

size()和length

  • size()        jQuery 对象中元素的个数。

  • length        jQuery 对象中元素的个数。同size()效果一致;

selector

        返回传给jQuery()的原始选择器。

        换句话说,就是返回你用什么选择器来找到这个元素的。可以与context一起使用,用于精确检测选择器查询情况。这两个属性对插件开发人员很有用。

context

        返回传给jQuery()的原始的DOM节点内容,即jQuery()的第二个参数。如果没有指定,那么context指向当前的文档(document)。

        可以与selector一起使用,用于精确检测选择器查询情况。这两个属性对插件开发人员很有用。

get([index])

        取得其中一个匹配的元素。 

        这能够让你选择一个实际的DOM 元素并且对他直接操作,而不是通过 jQuery 函数。$(this).get(0)与$(this)[0]等价。

        参数:
        [index]        取得第 index 个位置上的元素

index([selector|element])

        搜索匹配的元素,并返回相应元素的索引值,从0开始计数。

        如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置。

        如果参数是一组DOM元素或者jQuery对象,那么返回值就是传递的元素相对于原先集合的位置。
 
        如果参数是一个选择器,那么返回值就是原先元素相对于选择器匹配元素中的位置。如果找不到匹配的元素,则返回-1。

        参数:
        selector         一个选择器,代表一个jQuery对象,将会从这个对象中查找元素。
        element        获得 index 位置的元素。可以是 DOM 元素或 jQuery 选择器。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/jquery.min.js"></script>
</head>
<body>
    <div id="div1">
        我是第1个div的内容
        <p>1</p>
        <p>2</p>

    </div>
    <div>我是第2个div的内容</div>
    <div>我是第3个div的内容</div>
    <div>我是第4个div的内容</div>
    <script>
        // callback 回调函数
        /*  
            each(callback)  以每一个匹配的元素作为上下文来执行一个函数。

                jQuery函数基本上都是通过jQuery对象来调用的; 
                jQuery对象->通过$(选择器)得到的都叫jQuery对象
                    jQuery对象实际上是一个伪数组

                每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)
        */  
        $("div").each(function(i){
            console.log(this.innerHTML,$(this).html(),i)
        })

        // size()  jQuery 对象中元素的个数。
        // length   jQuery 对象中元素的个数。
        console.log($("div").size()); // 已移除
        console.log($("div").length);

        // selector 返回传给jQuery()的原始选择器。
        // context  返回传给jQuery()的原始的DOM节点内容,即jQuery()的第二个参数。
        // console.log($("p",document.getElementById("#div1")).selector,$("p","#div1").context);
        console.log($("#div1 > p").selector);

        /*  
            get([index]) 
                取得其中一个匹配的元素。 num表示取得第几个匹配的元素。
                没有参数: 取得所有匹配的 DOM 元素集合。
                参数: 取得第 index 个位置上的元素
        */
        console.log($("div")) // 通过jQuery获取4个div
        console.log($("div").get()) // DOM数组
        console.log($("div").get(1).innerHTML) // DOM元素节点
        console.log($("div")[1].innerHTML) // DOM元素节点

        /*  
            index([selector|element])
                搜索匹配的元素,并返回相应元素的索引值,从0开始计数。
                如果不给 .index() 方法传递参数,那么返回值就是这个jQuery对象集合中第一个元素相对于其同辈元素的位置。
        */
        $("div").click(function(){
            console.log($(this).index());
        })



        /*  
            API文档: 
                size()  不需要传递参数
                :not(selector)  必须传递参数
                get([index])    可以传递参数,也可以不传递
                wrap(html|ele|fn)   可以传递各种情况的参数
        */
    </script>
</body>
</html>

二、数据缓存

data([key],[value])

        在元素上存放数据,返回jQuery对象。

        如果jQuery集合指向多个元素,那将在所有元素上设置对应数据。

        参数:
                key        存储的数据名.
                key,value:
                        key:存储的数据名
                        value:将要存储的任意数据
                obj        一个用于设置数据的键/值对

removeData([name|list])

        在元素上移除存放的数据

        与$(...).data(name, value)函数作用相反

        参数:
                name:        存储的数据名
                list:        移除数组或以空格分开的字符串

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/jquery.min.js"></script>
</head>
<body>
    <div id="div1">

    </div>
    <script>
        /*  
            data([key],[value])  data([key],[value]) 
                key: 存储的数据名.String
                value: 将要存储的任意数据,Any
        */
        console.log($("#div1").data("userName")); // undefined

        // 设置数据
        $("#div1").data("userName","zhangsan") 
        $("#div1").data("userPwd","123")

        console.log($("#div1").data("userName")); // zhangsan

        // 修改数据
        $("#div1").data("userName","wangwu")

        console.log($("#div1").data("userName")); // wangwu

        $("#div1").data("stuInfo",{
            stuId:10001,
            stuName:"张三",
            stuAge:12
        })

        console.log($("#div1").data("stuInfo"));

        /* $("#div1").removeData("userName");
        $("#div1").removeData("userPwd"); */

        // $("#div1").removeData("userName userPwd");
        $("#div1").removeData(["userName","userPwd"]);
        

        console.log($("#div1").data("userName")); // undefined
        console.log($("#div1").data("userPwd")); // undefined

    </script>
</body>
</html>

三、队列控制

queue(element,[queueName])

        显示或操作在匹配元素上执行的函数队列

        element,[queueName]        Element,String

        element:检查附加列队的DOM元素

        queueName:字符串值,包含序列的名称。默认是 fx, 标准的效果序列。

dequeue([queueName])

        从队列最前端移除一个队列函数,并执行他。

        [queueName]        String

        队列名,默认为fx

clearQueue([queueName])

        清空对象上尚未执行的所有队列

        如果不带参数,则默认清空的是动画队列。这跟stop(true)类似,但stop()只能清空动画队列,而这个可以清空所有通过 .queue() 创建的队列。

        queueName        Boolean

        含有队列名的字符串。默认是"Fx",动画队列。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/jquery.min.js"></script>
    <style>
        div {
            margin: 3px;
            width: 40px;
            height: 40px;
            position: absolute;
            left: 0px;
            top: 30px;
            background: green;
            display: none;
        }

        div.newcolor {
            background: blue;
        }

        span {
            color: red;
        }
    </style>

</head>

<body>
    <!-- <button id="show">Show Length of Queue</button>
    <span></span>
    <div></div> -->

    <button id="start">Start</button>
    <button id="stop">Stop</button>
    <div></div>


    <script>
        /* // 给按钮添加鼠标单击事件
        $("#show").click(function () {
            // 显示在匹配元素上执行的函数队列
            var n = $("div").queue("fx");
            $("span").text("Queue length is: " + n.length);
        });

        function runIt() {
            // 总共给div绑定了8个函数
            // 2s显示div
            $("div").show(2000);
            // 2s从left 0 到 left 200
            $("div").animate({
                left: '+=200'
            }, 2000);
            // slideToggle 如果是显示的,则隐藏; 如果是隐藏的则显示
            $("div").slideToggle(1000); // 隐藏
            $("div").slideToggle("fast"); // 显示
            // 1.5s从left 200 到 left 0
            $("div").animate({
                left: '-=200'
            }, 1500);
            // 隐藏
            $("div").hide("slow");
            // 显示
            $("div").show(1200);
            // 隐藏
            $("div").slideUp("normal", runIt);
        }
        runIt(); */

        // 给start按钮添加鼠标单击事件
        $("#start").click(function () {
            // 显示
            $("div").show("slow");
            // 5s从0 到 200
            $("div").animate({
                left: '+=200'
            }, 5000);
            // 向函数队列插入一个函数
            $("div").queue(function () {
                $(this).addClass("newcolor"); // 添加了一个类
                // 从队列最前端移除一个队列函数,并执行他。
                $(this).dequeue();
            });
            // 从200 到 0
            $("div").animate({
                left: '-=200'
            }, 1500);
            // 向函数队列插入一个函数
            $("div").queue(function () {
                $(this).removeClass("newcolor"); // 移除一个类
                $(this).dequeue();
            });
            $("div").slideUp();
        });

        $("#stop").click(function () {
            /* // 清空队列函数
            $("div").queue("fx", []); // 当前函数会继续执行
            // 停止所有在指定元素上正在运行的动画。
            $("div").stop(); */

            // stop 会把动画队列瞬间完成

            // clearQueue([queueName]) 清空对象上尚未执行的所有队列
            // $("div").clearQueue(); 
            // $("div").stop(); 

            /*  
                stop() --->onle for animate     
                clearQueue() --->remove any function attached to a standard jquery queue
                stop()只用于animate,clearQueue()清空的是列队所有未执行的函数,且当前函数也会按原速度执行完
            */
            
        });
    </script>
</body>

</html>

四、插件机制

jQuery.fn.extend(object)

        扩展 jQuery 元素集来提供新的方法(通常用来制作插件)。

        object        Object

        用来扩充 jQuery 对象。

jQuery.extend(object)

        扩展jQuery对象本身。

        用来在jQuery命名空间上增加新函数。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/jquery.min.js"></script>
</head>

<body>
    <input type="checkbox" name="hobby" value="足球"> 足球
    <input type="checkbox" name="hobby" value="篮球"> 篮球
    <input type="checkbox" name="hobby" value="羽毛球"> 羽毛球
    <input type="checkbox" name="hobby" value="乒乓球"> 乒乓球
    <button id="checkAll">全选</button>
    <button id="uncheckAll">全不选</button>
    <button id="reverseCheck">反选</button>
    <script>
        // jQuery.fn.extend(object) 扩展 jQuery 元素集来提供新的方法(通常用来制作插件)。
        // 如果是用来操作页面元素的,那么肯定是jQuery.fn.extend(object) 
        jQuery.fn.extend({
            checkAll: function () {
                // this就是jQuery对象
                return this.each(function () {
                    // each里面的this是dom对象
                    this.checked = true;
                })
            },
            uncheckAll: function () {
                // this就是jQuery对象
                return this.each(function () {
                    // each里面的this是dom对象
                    this.checked = false;
                })
            },
            reverseCheck: function () {
                // this就是jQuery对象
                return this.each(function () {
                    // each里面的this是dom对象
                    this.checked = !this.checked;
                })
            },
        })

        // 以上封装好的方法,都可以通过jQuery对象访问
        $("#checkAll").click(function () {
            $("input[type=checkbox]").checkAll();
        })

        $("#uncheckAll").click(function () {
            $("input[type=checkbox]").uncheckAll();
        })

        $("#reverseCheck").click(function () {
            $("input[type=checkbox]").reverseCheck();
        })

        // jQuery.extend(object)扩展jQuery对象本身。
        // 如果和页面元素没有任何关联的,jQuery.extend(object)
        jQuery.extend({
            min: function (a, b) {
                return a < b ? a : b;
            },
            max: function (a, b) {
                return a > b ? a : b;
            },
            equals: function(a,b){
                return a === b;
            }
        });

        console.log($.min(2,5));
        console.log($.max(2,5));
        console.log($.equals(5,"5"));
    </script>
</body>

</html>

五、多库共存

jQuery.noConflict([extreme])

        运行这个函数将变量$的控制权让渡给第一个实现它的那个库。

        这有助于确保jQuery不会与其他库的$对象发生冲突。 在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("div p")的地方,就必须换成jQuery("div p")。 '''注意:'''这个函数必须在你导入jQuery文件之后,并且在导入另一个导致冲突的库'''之前'''使用。当然也应当在其他冲突的库被使用之前,除非jQuery是最后一个导入的。

        extreme        Boolean

        传入 true 来允许彻底将jQuery变量还原

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- <script src="js/jquery.min.js"></script> -->
</head>
<body>
    <div id="div1">
        我是div1的内容
    </div>

    <script src="js/comm.js"></script>
    <script>
        console.log("没有引入jQuery之前:",$("div1"));
    </script>

    <script src="js/jquery.min.js"></script>
    <script>
        console.log("引入了jQuery之后:",$("div1"));
    </script>

    <script>
        // 运行这个函数将变量$的控制权让渡给第一个实现它的那个库。
        jQuery.noConflict();
        console.log("多库共存之后:",$("div1"));

        // jQuery把$让出去了,只能用jQuery
        console.log(jQuery("#div1"));

        jQuery(function($){
            // // 使用 $ 作为 jQuery 别名的代码
            console.log($("#div1"))
        })
    </script>
</body>
</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是波哩个波

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值