首页 > Web开发 > 详细

jquery04(未完)

时间:2020-05-08 09:33:20      阅读:38      评论:0      收藏:0      [点我收藏+]

jQuery插件的封装

获取元素添加样式一般情况(直接获取元素)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 50px;
            height: 50px;
            background-color: aquamarine;
            position: absolute;
            left: 300px;
            top: 200px;
        }
    </style>
    <script src="../node_modules/jquery/dist/jquery.js"></script>
</head>
<body>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <div></div>
    <div id="divs"></div>
    <div></div>
    <div></div>
    <script>
          // 当需要给jquery对象增加方法时,可以设置$.fn下面添加一个方法,这样添加好之后jquery就有这个方法了 
        $.fn.bg=function(color){
            if(color===undefined) return this.css("backgroundColor");//this就是调用该方法的jQuery对象
this.css("backgroundColor",color)
            return this;//所有的jquery方法最后一定要return this
        }


        $.fn.pos=function(posObj){
            if(posObj===undefined){
                return {//返回元素的当前坐标 
                    left:parseFloat(this.css("left")),//将尾缀的字符串px去掉
                    top:parseFloat(this.css("top"))
                }
            }
            this.css({
                position:"absolute",
                left:String(posObj.left).indexOf("px")>-1 ? posObj.left : posObj.left +"px",
                top:String(posObj.top).indexOf("px")>-1 ? posObj.top : posObj.top+"px"
            })
            
            return this;
        }

        //  $("div").width(100).height(100).bg("red");
        //  $("<div></div").appendTo("body").width(100).height(100).bg("green");
        // $("p").width(50).height(50).bg("green");
        // $("p,div").width(50).height(50).bg("green");
        // $("<div></div>").width(100).height(100).bg("green").appendTo("body");

        //  console.log($("div").bg());
        // $("div").pos({left:1000});
        // console.log($("div").pos());
    </script>
</body>
</html>
获取元素添加样式id情况(通过id获取元素)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 50px;
            height: 50px;
            background-color: aquamarine;
            position: absolute;
            left: 300px;
            top: 200px;
        }
    </style>
    <script src="../node_modules/jquery/dist/jquery.js"></script>
</head>
<body>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <div></div>
    <div id="divs"></div>
    <div></div>
    <div></div>
    <script>
       $.fn.bg=function(color){
           if(this.attr("id")!=="divs"||this.length>1) return;//id获取元素需要加这一条
      if(color===undefined) return this.css("backgroundColor");
            this.css("backgroundColor",color);
            return this;
       }

       $.fn.pos=function(posObj){
           if(posObj===undefined){
               return{
                   left:parseFloat(this.css("left")),
                   top:parseFloat(this.css("top"))
               }
           }
           this.css({
                 left:String(posObj.left).indexOf("px")>-1 ? posObj.left : posObj.left +"px",
                 topleft:String(posObj.top).indexOf("px")>-1 ? posObj.left : posObj.top +"px",
             })
             return this;
         }
          // $("#divs").width(100).height(100).bg("red");
// $("div").width(100).height(100).bg("red");
        // $("<div></div").appendTo("body").width(100).height(100).bg("green");
        // $("p").width(50).height(50).bg("green");
        // $("p,div").width(50).height(50).bg("green");
        // $("<div></div>").width(100).height(100).bg("green").appendTo("body");


        //  console.log($("div").bg());
        // $("div").pos({left:1000});
        // console.log($("div").pos());
       
    </script>
</body>
</html>

上面两种方法,无论哪种写$("#divs").width(100).height(100).bg("red");的时候都要写在最后面,而且有时候会把全局变量污染,那么如何解决这个问题?

写在自执行函数中

(function(){

  中间写上面红色部分代码

})()

 

里面的内容就被限制住了,只要放在里面,就是封装好了,里面的就变成一个局部变量了,不会受到外面的污染

 

上面是jquery对象的封装,那么接下来是不管jquery对象的封装

用$.extend()向jquery中添加函数例: 

$.extend({ 
sayHello:function(name){ 
alert(‘hello‘+(name?name:‘Dude‘)+‘!‘);
}
}) 
$.sayHello();//调用 
$.sayHello(‘Wayou‘);//带参数调用 

那么如何增加方法呢?以filter为例,做成数组也能用,对象也能用的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            width: 50px;
            height: 50px;
            background-color: aquamarine;
            /* position: absolute;
            left: 300px;
            top: 200px; */
        }
    </style>
    <script src="../node_modules/jquery/dist/jquery.js"></script>
</head>
<body>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <p></p>
    <div></div>
    <div id="divs"></div>
    <div></div>
    <script>
        // 数组、对象、jQuery都可以带进来,如果是构造函数是一个jQuery,也就是说是一个jQuery对象时,就让它是一个数组
    //    然后遍历元素的时候,进行一个判断,如果是一个数组或者jQuery对象就直接添加到组里面,如果是一个对象就放到对象中,这样元素就写好了4
    // 最后我们来写条件,如果是jQuery对象,就把数组转化为jQuery对象,并返回出去
// 这样就完成了filter,比数组中更完善,兼具数组、对象、jQuery
       $.extend({
           filter:function(list,fn){//fn是函数,作用是接收所有内容,并且使用return返回
                //首先判断list是什么,
                //list是一个数组创建一个数组
                //list是一个对象创建一个对象
                //list是一个别的创建一个别的
                //isArray可以判断
                var newList=new list.constructor();
                //new list.constructor就是new一个Array,
                // var arr={a:1,b:2,c:3,d:4}
                // var arr=[2,4,3,1,5,6];
                // var arr= $("div");
                // console.log(new arr.constructor());
                // 如果arr是一个数组,那么new arr.constructor()就是一个数组
                // 如果arr是一个对象,那么new arr.constructor()就是一个对象
                // 如果arr是一个$("div"),那么new arr.constructor()就是一个jQuery对象
                // 即根据对象的构造函数创建这个类型的对象
                if(list.constructor===jQuery){
                    newList=[];
                }
                for(var prop in list){
                    if(fn(prop,list[prop])){//prop:属性,list[prop]:属性值
                       if(Array.isArray(list)){
                        newList.push(list[prop]);
                       }else{
                        newList[prop]=list[prop];
                       }                    
                    }
                }
                if(list.constructor===jQuery){
                    newList=$(newList);
                }
                return newList;
           }
       })
       
    //    数组
    //    var arr=[2,4,3,1,5,6];
    //    var list=$.filter(arr,function(prop,item){
    //         console.log(item);
    //         return item>2;//return的结果给fn(prop,list[prop])
    // });
    // console.log(list);


    // 对象
    // var arr={a:1,b:2,c:3,d:4}
    // var list=$.filter(arr,function(prop,item){
    //         console.log(item);
    //         return item>2;//return的结果给fn(prop,list[prop])
    // });
    // console.log(list);

    // jQuery
    // var list=$.filter($("div"),function(prop,item){
    //     return item.id==="divs"//return的结果给fn(prop,list[prop])
    // });
    // console.log(list);
    //   list.css("backgroundColor","red");
    </script>
</body>
</html>

 

 

jquery04(未完)

原文:https://www.cnblogs.com/wjsblog/p/12847034.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!