标签:
已经不知道是第几次下定决心要看完jquery了,也不到是第几次刚看就放弃了,我想了想唯有持续不断的记录是我前进的动力,不想一直只看一个开始。
持续更新ing,求指教,求解释,求科普,写的都是皮毛,求指教
其实吧jquery的官方公布了很多实用的api,但是有很多的方法都没有被放出来的(当然不放出来估计是因为实用性不强或是很多都是基础方法,被调用的啦),这些方法也有一些看起来不错的哦,手贱边看边写出来,防止以后忘记了;
当然了如果有中文文档的api,偶对英文的api真心半眼都懒着看,呵呵必然对一些新出的方法木有看到思密达,要是有写的已经在api上了就告诉我,一定干掉它,希望我能坚持把jquery看完并且持续更新它。
先声明一下场景,我看的是jquery.1.8.2的jquery源码,但是很搓的事情是帮助文档用的是1.4.1。
1.$.fn.toArray()
将给定的数据切割部分并返回,很遗憾的是jquery这里只是简单的要返回的数组(估计是没有什么大用场),不具有切割能力
方法如下:
$.fn = {
toArray: function() {
return core_slice.call( this );
}
}
如果想让它有能切割数据改一下嘛(这样可不像jquery的get那么人性了,具体如何处理js原生的slice怎么处理它就怎么处理的)
toArray: function(start, end) {
return core_slice.call( this ,start, end);
}
2.$.fn.pushStack
这个家伙第一看看上去以为跟堆栈有关系呢,看来看去原来是组合一个新的元素集合(我先这么说吧)我后悔了,当我看到map的时候我才知 道,原来只有第一个参数的时候真的只是数组的操作)_( ----堆栈最简单的构成方式就是用一个一维数组,好吧这个名字算是我不解了。
代码如下:
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery.merge( this.constructor(), elems );
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
ret.context = this.context;
if ( name === "find" ) {
ret.selector = this.selector + ( this.selector ? " " : "" ) + selector;
} else if ( name ) {
ret.selector = this.selector + "." + name + "(" + selector + ")";
}
// Return the newly-formed element set
return ret;
}
我刚看它的时候真心被虎住了,不知道它是干什么的,后来我肤浅的看了一下,我的理解:简单的理解就是拼接了一个新串, 要是认真的看一下jquery的not、closest、 find等这类在一个集合中调用的方法就会发现它的作用了
例如:$(‘div‘).not(‘span‘) => $(‘div.not(span)‘) 他并不想我之前预想的,先$(‘div‘)变成一个数组,然后在去去除数据而是直接在找的过程中干掉span对应的数据(我是这么想的).
3.$.fn.end()
其实吧他就是 $(document) 是一个jquery对象啦^_^
4.$.fn.push、sort、splice
这几个函数都什么意义了,全是直接调用js原生的实现了。
5.$.holdReady
这个东东虽然定义了,其实我没看到那里调用,看了一眼注释貌似是控制$.ready的状态的。
6.$.isFunction(obj)
确定对象是否是函数 其实吧我觉的就是它内部的class2type 家伙其了很大作用的
[object Number]: "number"
[object Object]: "object"
7.$.isNumeric(obj)
确定对象是否是数字,isArray 是否是数组,isWindow 是否是window对象本身或是包含window对象,这个嘛在iframe中可以看出来
8.$.isPlainObject
这个家伙是检查一个对象是不是普通对象(不能是window对象,不能是dom还要不能有constructor和isPrototypeOf,真是一个干瘪的对象啊,不知道他要干什么用的)
9.isEmptyObject(obj)
检查对象是否是空对象
10.$.error(msg)
给浏览器的控制台输出一个error ---486
11.parseHTML
将字符串转换成一个html的串。如果是标签的串则返回一个js的dom,还支持串中是否过滤script标签和执行能力。看了一下,jquery主要利用它在初始化(init)页面的时候将js动态插入的包含标签的串变成一个jquery的dom,然后就用它做该做的动作;
例如:$(‘< span >aa\‘).appendTo(‘body‘); 把这个串变成了一个dom然后插入body标签中(这个方法可以算作无意义,因为$(‘html串‘)更实用)
12.$.parseJSON(data)
将一个字符串转化为json对象,有了它在ie6、7下可以不用引入JSON2.js啦,测试是这个样子的
13.$.parseXML(data)
将一个xml的串转换成js的对象
14.$.globalEval(data)
将一个串做js执行
15.$.camelCase(data)
将字符串转换成峰陀的命名方式
16.$.nodeName(elem, name)
判断一个js的dom是否是某一个标签的名字(第一个只能单个dom,不能使数组)
17.$.makeArray(arr, ret)
合并两个对象 ,如果都是数组则arr 合并到ret后,// results is for internal usage only
18.$inArray(elem, arr, startpos)
在数组从指定位置开始的搜索元素,-1没找到
19.$.merge(first,second)
合并两个数组
20.$.grep(elems, callback, inv )
从集合中筛选条件元素$.grep([1,2,3,4],function(i){return i%3;})
21.$.proxy(fn, context)
主要是让context集成fn中的某个让发,主要原理就是用了apply
谁便写一个例子:var obj = {a:function(){alert(1)},b:function(){alert(2)}};
$.proxy(obj, ‘b‘)();执行一下就知道。其实就是obj.b()了
其实内部的核心代码就是
fn.apply( context, args.concat( core_slice.call( arguments ) ) );
22. $.now
顾名思义获取当前时间戳了 函数内容很简单了return ( new Date() ).getTime();
标签:
原文地址:http://www.cnblogs.com/shouce/p/5476473.html