自己也能封装jquery,写自己的jquery

//现在大大多项目都是用jquery开发的,Jquery 很好用,不妨自己写一下自己的jquery ,了解Jquery内部实现的原理。 //和上篇随笔一样,采用面向对象的方法封装自己的js库.

1.和jquery 一样,jquery $()方法里面.能传四种不同的参数如:

  $("")一个字符串

     字符串的形式有三种情况:$("#id"),$(".class"),$("p"); 

$(function(){}),函数,

    只有一情况,就是window.onload

$(this),对象

function XQuery(vArg){

  this.elements = [];//用来保存选中的数组。

  switch(typeof vArg){    case "function":       bindEvent(window,"load",vArg);     break;   case "string":     switch(vArg.charAt(0)){     case "#"://id选择器

      var obj = document.getElementById(vArg.substring(1));       this.elements.push(obj);     break;     case"."://类选择器       this.elements = getElementsByClassName(document,vArg.substring(1));     break;     default://标签选择器       this.elements = document.getElementsByTagName(vArg);     break;   }   break;   case "object":     this.elements.push(vArg);   break;   }

}

//写一个类似Jquery的$方法

function $(vArg){

  return new xQuery(vArg);

}

//下面来通过原型的方法给xQuery对象添加各种方法:

xQuery.prototype = {

  click : function(fn){

    var i = 0;

    for(i=0;i<this.elements.length;i++){

      bindEvent(this.elements[i],"click",fn);

    }

    i = null;//通过js的作用域我们知道,这时候i还有值的,i = this.elements.length;,所以我们需要手动释放i;

    //为了实现jquery的链式操作,我们需要返回当前对象

    return this;

  },

  hover :  function(fnOver,fnOut){

    var i =0 ;

    for(i = 0; i < this.elements.length; i++){

      if(fnOver){         bindEvent(this.elements[i],"mouseover",fnOver);       }       if(fnOut){         bindEvent(this.elements[i],"mouseout",fnOut);       }     }

    return this;   },

  css : function(attr,value){

     if(arguments.length == 2){//传两个参数的时候,设置样式     

      for(var i = 0;i < this.elements.length;i++){         this.elements[i].style[attr] = value;          }

     }      else{ //传进来一个参数.又分两种情况,一种是字符串,一种是json的形式         if(typeof attr == "string"){           return getStyle(this.elements[0],attr)         }         else{//以json的形式传进来的           for(var i = 0;i < this.elements.length;i++){             for(var a in attr){               this.elements[i].style[a] = attr[a];             }           }           return this;         }      }   },   extend : function(name,fn){ //xQuery 插件扩展     xQuery.prototype[name] = fn;   },//....好了就写这么多,其它的方法的实现都差不多, };

//传统的js页面只能有一个window.onload = function(){};

//要想要多个的话得用事件绑定的方式.

function bindEvent(obj, ev, fn){   if(obj.addEventListener){     obj.addEventListener(ev, function(e){       if(!fn.call(obj)){//当方法具有返回值的时候.         e.cancelBubble = true;//阻止冒泡        e.preventDefault();//阻止默认事件       }     }, false);   }   else{//低版本的IE用的是attchEvent;     obj.attachEvent(‘on‘+ev, function(){     if(!fn.call(obj)){       event.cancelBubble = true;//阻止冒泡       return false;    //阻止默认事件      }     })   } }

//获取样式 function getStyle(obj,attr){  if(obj.currentStyle){    return obj.currentStyle[attr];  }   else{    return getComputedStyle(obj,false)[attr];   } }

//总结:xQuery 只是实现了一很小部分的JQuery功能,以此勉励自己在用别人的框架的同时,要明白基原理,不能做傻瓜式开发.

时间: 2024-08-18 17:26:11

自己也能封装jquery,写自己的jquery的相关文章

为JQuery写插件

很多场合,我们都会调用jQuery的插件去完成某个功能,比如slider. 如下图,做一个div,通过“$( "#slider" ).slider();”的方式直接将div变成slider,比起slider($('#slider'))更贴近jQuery的链式调用写法,可读性和通用性更好些. 那么,我们也来为jQuery写插件.便于项目中的组件化. 方法是非常简单的,那就写一个测试的demo来作为基础的验证吧. 定义html,假设我们要把test div修改成宽高都是200px,背景色为

jquery写插件的几种写法总结(持续补充中)

1:jQuery.fn.extend(object);  给jQuery对象添加方法. js封装文件示例 $.fn.extend({ alertWhileClick:function(){ $(this).click(function(){ alert($(this).val()); }); } }); HTML中的js调用 $(“#input1″).alertWhileClick(); HTML代码 <input id=”input1″ type=”text”/> 2:jQuery.exte

用jquery写自己的form表单验证

这几天看了锋利的jquery,感觉很不错.特别是jquery强大的选择器.今天就利用jquery写了一个自己的form表单验证的小案例.当巩固下jquery.首先贴下代码,当然只是一个小案例. 思路:   1.<input type="text" Validate="Date" id="date"/>这里的 Validate:是我们需要验证的类型(属于日期类型),这里你也可以自己定义.id属性就不用说了.<input type=

原生javascript写的网页选项卡和jQuery写的比较

总的来说思路比较简单,就是先获取节点,然后对节点进行相应的处理,下面是完整的页面代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>原生js tab</title>

自己在项目中写的一个Jquery插件和Jquery tab 功能

后台查询结果 PDFSearchResult实体类: [DataContract(Name = "PDFSearchResult")] public class PDFSearchResult { public PDFSearchResult(string title, string fileUrl) { Title = title; FileUrl = fileUrl; } [DataMember(Name = "title")] public string Ti

jQuery写选项卡

<!DOCTYPE html> <htmllang="en"> <head> <metacharset="UTF-8"><title>choseCart</title> <script src="https://cdn.bootcss.com/jquery/1.8.3/jquery.js"></script> <styletype="t

JavaScript封装Ajax工具函数及jQuery中的ajax

封装ajax工具函数 /** * ITCAST WEB * Created by zhousg on 2016/5/24. */ /* * 1. 请求的类型 type get post * 2. 请求地址 url * 3. 是异步的还是同步的 async false true * 4. 请求内容的格式 contentType * 5. 传输的数据 data json对象 * * 6.响应成功处理函数 success function * 7.响应失败的处理函数 error function *

jQuery写出可调控自定义的平滑滚动效果(锚点跳转动画)

今天朋友,没错,是上次的好基友,在用jQuery.scrollTo.js这个插件的时候总是没反应,而且在函数里console可以输出数据,这点现在仍让我很困惑,难道是scroll版本和我引用的jQUery版本不兼容?我在自己本地搭建了一个小demo也没反应,于是就借助动画写了一个可以自定义滑动的距离和速度调控的demo.供大家参考,欢迎交流更好的办法. 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 &

用jQuery写了一个模态框插件

用jQuery写了一个模态框插件 大家觉得下面的框框好看么, 水印可以去掉(这个任务交给你们了(- o -)~zZ); "info"框 $("div").confrimModal("<font color=\"green\">成功! </font>", {type:"info", themeColor: "#008B8B"}, true); "alert