jQuery中开发插件

news/2024/9/19 15:33:03/文章来源:https://www.cnblogs.com/njhwy/p/18406859
页面代码
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="jquery-3.4.1.js"></script>
    <style>
        table{
            border-collapse: collapse;
        }
        td,tr,th{
            border:1px solid red;
        }
        .one{
            background-color: rebeccapurple;
            font-weight: bold;
            color:white;
        }
        .two{
            background-color: cadetblue;
            color: black;
        }
    </style>
</head>
<body>
   
    <script>
         //添加全局函数需要以新方法来扩展jQuery对象
        (function($){
            //要向jQuery的命名控件中添加一个函数,
            //只需要将这个新函数指定为jQuery对象的一个属性即可
            $.sum=function(array){
             var total=0;
             $.each(array,function(index,value){
                value=$.trim(value);
                value=parseFloat(value)||0;
                total+=value;
             });
             return total;
            };
            $.average=function(array){
                if($.isArray(array)){
                    return $.sum(array)/array.length;
                }
                return '';
            };
            //通过$.extend()就可以给全局jQuery对象添加属性,
            //如果有相同的属性,会替换原来属性
            $.extend({
                sum:function(array){
                    var total=0;
                    $.each(array,function(index,value){
                        value=$.trim(value);
                        value=parseFloat(value)||0;
                        total+=value;
                    });
                    return total;
                    },
                average:function(array){
                        if($.isArray(array)){
                            return $.sum(array)/array.length;
                        }
                        return '';
                    }
            });

            //其他jQuery插件也可能定义了相同的函数名,
            //为了避免冲突,把属于一个插件的全局函数都封装到一个对象中
            $.mathUtils={
                sum:function(array){
                    var total=0;
                    $.each(array,function(index,value){
                        value=$.trim(value);
                        value=parseFloat(value)||0;
                        total+=value;
                    });
                    return total;
                    },
                average:function(array){
                        if($.isArray(array)){
                            return $.sum(array)/array.length;
                        }
                        return '';
                    }
            }
        })(jQuery);


        $(document).ready(function(){
            var $inventory=$('#inventory tbody');
            var quantities=$inventory.find('td:nth-child(2)').map(function(index,qty){
                console.log(index);
                console.log(qty);
                return $(qty).text();
            }).get();
            console.log(quantities);
            var prices=$inventory.find('td:nth-child(3)').map(function(index,pr){
                return $(pr).text();
            }).get();
            var sum1=$.sum(quantities);
            var sum2=$.sum(prices);
            var sum1=$.mathUtils.sum(quantities);
            var sum2=$.mathUtils.sum(prices);
            $('#sum').find('td:nth-child(2)').text(sum1);
            $('#sum').find('td:nth-child(3)').text(sum2);
            console.log($.average(quantities));
            $('#average').find('td:nth-child(2)').text($.average(quantities));
            $('#average').find('td:nth-child(3)').text($.average(prices).toFixed(2));

        });
        //添加jQuery对象方法,扩展的却是jQuery.fn对象,即jQuery.prototype
        // jQuery.fn.myMethod=function(){
        //     alert("Nothing happens");
        // }
        // $(document).myMethod();
        //新方法接受两个类名,每次调用更换应用于每个元素的类,
        (function($){
            //jQuery的选择符表达式可能会匹配0~n个元素。
            $.fn.swapClass=function(class1,class2){
                //object对象数组调用hasClass()只会检查匹配的第一个元素
                //在任何插件内部,this对象引用的都是当前jQuery对象
                if(this.hasClass(class1)){
                    this.removeClass(class1).addClass(class2);
                }else if(this.hasClass(class2)){
                    this.removeClass(class2).addClass(class1);
                }
            };
            $.fn.swapClass=function(class1,class2){
                //object对象数组调用hasClass()只会检查匹配的第一个元素
                //在任何插件内部,this引用的都是当前jQuery对象
                  //在对象方法体内,this引用的是一个jQuery对象
                  //.each()会执行隐式迭代
                  //使用连缀方法
                return this.each(function(){
                    //在.each方法中,this引用的则是一个DOM元素
                    $element=$(this);
                    if($element.hasClass(class1)){
                        $element.removeClass(class1).addClass(class2);
                    }else if($element.hasClass(class2)){
                        $element.removeClass(class2).addClass(class1);
                    }
                })
               
            };
        })(jQuery);
        $(document).ready(function(){
              $('table').click(function(){
                //这里的$('tr')为jQuery.fn.init {0: tr.one11, 1: tr#sum.two, 2: tr#average, 3: tr, 4: tr, 5: tr, length: 6, prevObject: j…y.fn.init}
                console.log($('tr'));
                $('tr').swapClass('one','two');
              });
        });
        //提供灵活的方法参数
        // (function($){
        //        $.fn.shadow=function(){
        //         return this.each(function(){
        //             var $originalElement=$(this);
        //             for(var i=0;i<5;i++){
        //                 $originalElement.clone()
        //                 .css({
        //                     position:'absolute',
        //                     left:$originalElement.offset().left+i,
        //                     top:$originalElement.offset().top+i,
        //                     margin:0,
        //                     zIndex:-1,
        //                     opacity:0.1
        //                 })
        //                 .appendTo('body');
        //             }
        //         })
        //        }
        // })(jQuery);
        // $(document).ready(function(){
        //     $('h1').shadow();
        // });
        (function($){
               $.fn.shadow=function(opts){
                //以对象多为参数,可以为用户未指定的参数自动传入默认值
                // var defaults={
                //     copies:5,
                //     opacity:0.1,
                //     //在方法中使用回调函数,需要接受一个函数对象对象作为参数,然后再方法中适当的位置上调用该函数
                //     copyOffset:function(index){
                //         return {x:index,y:index}
                //     }
                // };
                var options=$.extend({},$.fn.shadow.defaults,opts);
                return this.each(function(){
                   
                    var $originalElement=$(this);
                    for(var i=0;i<options.copies;i++){
                        var offset=options.copyOffset(i);
                        console.log(111)
                        $originalElement.clone()
                                        .css({
                                                position:'absolute',
                                                left:$originalElement.offset().left+offset.x,
                                                top:$originalElement.offset().top+offset.y,
                                                margin:0,
                                                zIndex:-1,
                                                opacity:options.opacity
                                            })
                                        .appendTo('body');
                    }
                });
               };
               //定制默认值
               $.fn.shadow.defaults={
                copies:5,
                opacity:0.1,
                copyOffset:function(index){
                    return {x:index,y:index};
                }
               }
        })(jQuery);
     
         $(document).ready(function(){
            //定制默认值,可以让我们减少很多的代码
            $.fn.shadow.defaults.copies=10;
            $('h1').shadow({
                opacity:0.25,
                copyOffset:function(index){
                    return {x:-index,y:-2*index};
                }
            })
         }
           
         );
    </script>
    <h1>Inventory</h1>
    <table id="inventory" style="margin: 0 auto; height: 300px; width: 400px; ">
        <thead>
            <tr
            class="one"
            >
                 <th>Product</th><th>Quantity</th><th>Price</th>
            </tr>
        </thead>

        <tfoot>
            <tr class="two" id="sum">
                <td>Total</td><td></td><td></td>
            </tr>
            <tr id="average">
                <td>Average</td><td></td><td></td>
            </tr>
        </tfoot>
        <tbody>
            <tr>
                <td>
                    <a href="spam.html" data-tooltip-text="Nutritious and delicious">Spam</a>
                </td>
                <td>4</td>
                <td>2.50</td>
            </tr>
            <tr>
                <td>
                    <a href="egg.html" data-tooltip-text="Farm fresh or scrambled!">Egg</a>
                </td>
                <td>12</td>
                <td>4.32</td>
            </tr>
            <tr>
                <td>
                    <a href="gourmet-spam.html" data-tooltip-text="Chef Hermann's recipe.">Gourmet Spam</a>
                </td>
                <td>14</td>
                <td>7.98</td>
            </tr>
        </tbody>
    </table>
</body>
</html>
 
 
页面效果

 

 
 
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/795052.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 使用命令行查看硬件信息

ubuntu 使用命令行查看硬件信息 CPU cat /proc/cpuinfo其中,model name就显示了cpu的型号,cpu cores显示cpu的所有物理核心数量。 内存 cat /proc/meminfo其中,MemTotal就显示总内存大小,这里为32GB内存,SwapTotal显示了交换分区的内存大小,这里为 2GB。 硬盘大小 df -h可…

易百纳ss928开发板移植自训练模型跑通yolov5算法

ss928平台移植官方yolov5s算法参考文章:https://www.ebaina.com/articles/140000017418,这位大佬也开源了代码,gitee链接:https://gitee.com/apchy_ll/ss928_yolov5s 本文在参考上述文章的基础上,将官方yolov5s模型跑通,验证推理图片正确,然后移植自训练的推理模型,在移…

hyperworks软件许可优化解决方案

Hyperworks软件介绍 Altair 仿真驱动设计改变了产品开发,使工程师能够减少设计迭代和原型测试。提升科学计算能力扩大了应用分析的机会,使大型设计研究能够在限定的项目时间完成。现在,人工智能在工程领域的应用再次改变了产品开发。基于物理场的仿真驱动设计与机器学习相结…

Xcode 16 RC (16A242) 发布下载,正式版下周公布

Xcode 16 RC (16A242) 发布下载,正式版下周公布Xcode 16 RC (16A242) - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-16/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgXcode 16 的新…

md5拓展攻击

md5拓展攻击 【工具】hash-ext-attack/img/img_1.png at master shellfeel/hash-ext-attack GitHub 【攻击方法例题】https://ctf.org.cn/2019/11/19/哈希长度扩展攻击以及HashPump安装使用和两道题目/ 实际中的利用条件如下:基于哈希的消息认证码 (MAC):长度扩展攻击的关键…

JAVA+VUE实现动态表单配置

功能描述: 资产管理系统中,在资产分类中,给同一种类型的资产配置定制化的表单项,并实现不同类型显示不同的数据,如图所示:数据库设计部分: 1.表单项表CREATE TABLE `dct_smp`.`t_asset_product_definitions` (`id` bigint NOT NULL,`product_id` bigint NOT NULL COMMEN…

vue 可选链操作符(?.)报错

一直用的好好的这个运算符,换了个项目,用不了了 首先交代一下,vue版本是2.6.11,node版本是v14.17.4 ,vue-template-compiler也是2.6.11 首先哈,我们升级一下vue到2.7.xx版本npm i vue@2.7.0 vue-template-compiler@2.7.0然后安装这个插件npm install @babel/plugin-propo…

互信息

参考 互信息是信息论中用以评价两个随机变量之间的依赖程度的一个度量。 相关概念:信息量:是对某个事件发生或者变量出现的概率的度量,一个事件发生的概率越低,这个事件包含的信息量越大,这跟我们直观上的认知也是吻合的,越稀奇新闻包含的信息量越大,因为这种新闻出现的…

UEFI原理与编程(一)

第一章 UEFI概述(Unified Extensible Firmware Interface 统一的可扩展固件接口) 常见缩写及描述:缩略词 全名 描述UEFI Unified Extensible Firmware Interface 统一的可扩展固件接口BS Boot Services 启动服务RT Runtime Service 运行时服务BIOS Basic Input Output System …

SparkSQL练习:对学生选课成绩进行分析计算

题目内容: 对学生选课成绩进行分析计算题目要求: (1)该系总共有多少学生; (2)该系共开设来多少门课程; (3)每个学生的总成绩多少; (4)每门课程选修的同学人数; (5)每位同学选修的课程门数; (6)该系DataBase课程共有多少人选修; (7)每位同学平均成绩;数据…

面试-JS基础知识-原型和原型链

JS本身是基于原型来继承的语言。 问题引出:如何判断一个变量是不是数组? 手写一个简易的jQuery,考虑插件和扩展性 class的原型本质,怎么理解?知识点class和继承 类型判断 instanceof 原型和原型链class class相当于一个模版,可以用来构建(constructor)东西。 class Stu…

作业9.2:论文查重

这个作业属于哪个课程 班级链接这个作业要求在哪里 作业要求链接这个作业的目标 设计论文查重算法;学会 Git 版本控制。Github 链接:博客正文首行 github 链接 目录一、整体设计开发环境整体设计项目结构二、模块接口的设计与实现核心的类与方法类与函数的调用关系核心算法三…