博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jQuery源码学习第三天--jQuery的静态函数
阅读量:5008 次
发布时间:2019-06-12

本文共 5798 字,大约阅读时间需要 19 分钟。

今天学习jQuery的常见静态函数。看代码:

1:  //通过extend方法将对象中的方法赋予jQuery对象
2:  jQuery.extend({
3:      //交出$的控制权,假如我们需要使用jQuery 之外的另一js库,我们可以通过调用 $.noConflict() 向该库返回控制权。
4:      //通过向该方法传递参数true,我们可以将 $ 和 jQuery 的控制权都交还给另一js库
5:      noConflict: function( deep ) {},
6:      isReady: false,
7:      //一个计数器,用于跟踪在ready事件出发前的等待次数
8:      readyWait: 1,
9:      //继续等待或触发
10:      holdReady: function( hold ) {},
11:      //文档加载完毕句柄
12:      ready: function( wait ) {},
13:       //判断是不是函数
14:      isFunction: function( obj ) {},
15:      //判断是不是数组
16:      isArray: Array.isArray || function( obj ) {},
17:       //是否是window对象
18:      isWindow: function( obj ) {},
19:      isNumeric: function( obj ) {},
20:      type: function( obj ) {},
21:      isPlainObject: function( obj ) {},
22:      isEmptyObject: function( obj ) {},
23:      error: function( msg ) {},
24:      parseHTML: function( data, context, scripts ) {},
25:      parseJSON: function( data ) {},
26:      parseXML: function( data ) {},
27:      noop: function() {},
28:      globalEval: function( data ) {},
29:      camelCase: function( string ) {},
30:      nodeName: function( elem, name ) {},
31:      each: function( obj, callback, args ) {},
32:      makeArray: function( arr, results ) {},
33:      inArray: function( elem, arr, i ) {},
34:      merge: function( first, second ) {},
35:      grep: function( elems, callback, inv ) {},
36:      map: function( elems, callback, arg ) {},
37:      guid: 1,
38:      proxy: function( fn, context ) {},
39:      access: function( elems, fn, key, value, chainable, emptyGet, pass ) {},
40:      now: function() {}
41:  });

包含了很多函数,比如判断是否是函数、数组、window对象,是否是plain对象,解析html、json、xml等。

1、交出$的控制权

1:      //交出$的控制权,假如我们需要使用jQuery 之外的另一js库,
2:      //我们可以通过调用 $.noConflict() 向该库返回控制权。
3:      noConflict: function( deep ) {
4:          if ( window.$ === jQuery ) {
5:              window.$ = _$;
6:          }
7:         //通过传递参数true,我们可以将 $ 和 jQuery 的控制权都交还给另一js库
8:          if ( deep && window.jQuery === jQuery ) {
9:              window.jQuery = _jQuery;
10:          }
11:   
12:          return jQuery;
13:      },

2、判断是不是window对象函数,有很多种方法,jQuery的很多版本的判断方法都不一样,比如1.8之后的版本为:

1:  isWindow: function( obj ) {
2:      return obj != null && obj == obj.window;
3:  }

而之前的版本判断为:

1:  isWindow: function( obj ) {
2:      return obj && typeof obj === "object" && "setInterval" in obj;
3:  },

3、判断对象的类型

1:      type: function( obj ) {
2:         // 调用Object.prototype.toString方法,生成 "[object Xxx]"格式的字符串
3:         // class2type[ "[object " + name + "]" ] = name.toLowerCase();
4:         return obj == null ?
5:             String( obj ) :
6:             class2type[ toString.call(obj) ] || "object";
7:      },

这里的class2type函数定义为:

1:  // Populate the class2type map
2:  jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
3:      class2type[ "[object " + name + "]" ] = name.toLowerCase();
4:  }); 4、解析JSON数据
1:  parseJSON: function( data ) {
2:      if ( !data || typeof data !== "string") {
3:          return null;
4:      }
5:      // 去除收尾空格
6:      data = jQuery.trim( data );
7:      // 用JSON.parse(string)方法解析
8:      // 反序列化是JSON.stringify(object)
9:      if ( window.JSON && window.JSON.parse ) {
10:          return window.JSON.parse( data );
11:      }
12:      // 检查字符串合法性
13:      //from http://json.org/json2.js
14:      if ( rvalidchars.test( data.replace( rvalidescape, "@" )
15:          .replace( rvalidtokens, "]" )
16:          .replace( rvalidbraces, "")) ) {
17:          return ( new Function( "return " + data ) )();
18:      }
19:      jQuery.error( "Invalid JSON: " + data );
20:  } 5、解析xml:
1:      // 解析XML 跨浏览器
2:      // parseXML函数也主要是标准API和IE的封装。
3:      // 标准API是DOMParser对象。
4:      // 而IE使用的是Microsoft.XMLDOM的 ActiveXObject对象。
5:      parseXML: function( data , xml , tmp ) {
6:         if ( window.DOMParser ) { // Standard 标准XML解析器
7:             tmp = new DOMParser();
8:             xml = tmp.parseFromString( data , "text/xml" );
9:         } else { // IE IE的XML解析器
10:             xml = new ActiveXObject( "Microsoft.XMLDOM" );
11:             xml.async = "false";
12:             xml.loadXML( data );
13:         }
14:         tmp = xml.documentElement;
15:         if ( ! tmp || ! tmp.nodeName || tmp.nodeName === "parsererror" ) {
16:             jQuery.error( "Invalid XML: " + data );
17:         }
18:         return xml;
19:      }

6、遍历对象或者数组each:

1:  // 遍历对象或数组
2:  each: function( obj, callback, args ) {
3:      var name,i = 0,length = obj.length,
4:          isObj = length === undefined || jQuery.isFunction( obj );
5:      // 如果有参数args,调用apply,上下文设置为当前遍历到的对象,参数使用args
6:      if ( args ) {
7:          if ( isObj ) {
8:              for ( name in obj ) {
9:                  if ( callback.apply( obj[ name ], args ) === false ) {
10:                      break;
11:                  }
12:              }
13:          } else {
14:              for ( ; i < length; ) {
15:                  if ( callback.apply( obj[ i++ ], args ) === false ) {
16:                      break;
17:                  }
18:              }
19:          }
20:   
21:      // 没有参数args则调用,则调用call,上下文设置为当前遍历到的对象,参数设置为key/index和value
22:      } else {
23:          if ( isObj ) {
24:              for ( name in obj ) {
25:              if ( callback.call( obj[ name ], name, obj[ name ] ) === false ) {
26:                  break;
27:              }
28:              }
29:          } else {
30:              for ( ; i < length; ) {
31:                  if ( callback.call( obj[ i ], i, obj[ i++ ] ) === false ) {
32:                      break;
33:                  }
34:              }
35:          }
36:      }
37:      return obj;
38:  } 函数比较多,就不一一详述了。可自行查看。

转载于:https://www.cnblogs.com/fredshare/archive/2013/05/04/3059737.html

你可能感兴趣的文章
计算几何算法概览 (转)
查看>>
Notepad++的ftp远程编辑功能
查看>>
数据库多对多关联表(Python&MySQL)
查看>>
[实变函数]1.2 集合的运算
查看>>
第06天
查看>>
设计模式的征途—5.原型(Prototype)模式
查看>>
iOS10 app连接不上网络的问题
查看>>
结对开发之电梯调度最终稿(徐梦迪&刘博)
查看>>
simple java mail
查看>>
信息建模
查看>>
Mybatis 数据库物理分页插件 PageHelper
查看>>
虚函数、纯虚函数详解
查看>>
z-stack中数据的发送,广播、组播、点对点
查看>>
Practial Vim 学习笔记一
查看>>
.NET中使用js实现百度搜索下拉提示效果[不是局部刷新,呜呜。。]
查看>>
ITCAST视频-Spring学习笔记(使用Spring的注解方式实现AOP入门)
查看>>
关于二维码“QR”的6大注意事项
查看>>
MySQL - 常用命令及常用查询SQL
查看>>
C# .NET MVC 接收 JSON ,POST,WCF 无缝隙切换
查看>>
android获取USB设备的名称
查看>>