jQuery 2.1.4版本的源码分析
jQuery 2.1.4版本的源码分析
jquery中获取元素的源码分析
jQuery.each({
// 获取当前元素的父级元素
parent: function(elem) {
var parent = elem.parentNode;
//nodeType为11的节点类型是DocumentFragment
return parent && parent.nodeType !== 11 ? parent : null;
},
//获取所有的 父节点 这涉及到 dir 方法
parents: function(elem) {
return jQuery.dir(elem, "parentNode");
},
parentsUntil: function(elem, i, until) {
return jQuery.dir(elem, "parentNode", until);
},
next: function(elem) {
return sibling(elem, "nextSibling");
},
prev: function(elem) {
return sibling(elem, "previousSibling");
},
nextAll: function(elem) {
return jQuery.dir(elem, "nextSibling");
},
prevAll: function(elem) {
return jQuery.dir(elem, "previousSibling");
},
nextUntil: function(elem, i, until) {
return jQuery.dir(elem, "nextSibling", until);
},
prevUntil: function(elem, i, until) {
return jQuery.dir(elem, "previousSibling", until);
},
//返回所有的兄弟节点
siblings: function(elem) {
return jQuery.sibling((elem.parentNode || {}).firstChild, elem);
},
children: function(elem) {
return jQuery.sibling(elem.firstChild);
},
//返回框架里面的所有内容 或者 元素的所有子节点
contents: function(elem) {
return elem.contentDocument || jQuery.merge([], elem.childNodes);
}
}, function(name, fn) {
jQuery.fn[name] = function(until, selector) {
var matched = jQuery.map(this, fn, until); if(name.slice(-5) !== "Until") {
selector = until;
} if(selector && typeof selector === "string") {
matched = jQuery.filter(selector, matched);
} if(this.length > 1) {
// Remove duplicates
if(!guaranteedUnique[name]) {
jQuery.unique(matched);
} // Reverse order for parents* and prev-derivatives
if(rparentsprev.test(name)) {
matched.reverse();
}
} return this.pushStack(matched);
};
});
jQuery.extend({
// 寻找父级 直到 找到until结束 根据parents 方法可知 dir = parentNode
dir: function(elem, dir, until) {
var matched = [],
truncate = until !== undefined;
//进入循环的条件 不是根节点 且 且吧父节点复制给elem
while((elem = elem[dir]) && elem.nodeType !== 9) {
if(elem.nodeType === 1) {
//跳出循环
if(truncate && jQuery(elem).is(until)) {
break;
}
matched.push(elem);
}
}
return matched;
},
//通过上面的源码next方法可知 elem = nextSiblilng
sibling: function(n, elem) {
var matched = []; for(; n; n = n.nextSibling) {
if(n.nodeType === 1 && n !== elem) {
matched.push(n);
}
} return matched;
}
});
这里说一下 nextSibling 与 nextElementSibling的区别
nextSibling :返回元素之后的兄弟节点 (包含 注释 文本)
nextElementSibling:返回元素之后的兄弟节点 不包括注释 跟文本 且他的属性只为读
jQuery.noConflict源码分析
var
// 将JQuery挂载到Windows对象下
_jQuery = window.jQuery, // 将$挂载到Windows对象下
_$ = window.$;
// 当调用 Jquery.noConfict deep ==false 那么 $ 别名失效 如果 deep==true 那么 JQuery 的别名失效
jQuery.noConflict = function(deep) {
if(window.$ === jQuery) {
window.$ = _$;
} if(deep && window.jQuery === jQuery) {
window.jQuery = _jQuery;
} return jQuery;
}; // Expose jQuery and $ identifiers, even in AMD
// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
// and CommonJS for browser emulators (#13566)
if(typeof noGlobal === strundefined) {
window.jQuery = window.$ = jQuery;
2016-11-22 21:14:38
jQuery 2.1.4版本的源码分析的更多相关文章
- jQuery实现DOM加载方法源码分析
传统的判断dom加载的方法 使用 dom0级 onload事件来进行触发所有浏览器都支持在最初是很流行的写法 我们都熟悉这种写法: window.onload=function(){ ... } 但 ...
- jQuery deferred应用之ajax详细源码分析(二)
在上一节中,我只贴出了$.Deferred的源码分析,并没用讲解怎么使用它,现在我们先看看$.ajax是如何使用它,让我们进行异步任务的处理. 如果没看上节的代码,请先稍微了解一下jQuery Def ...
- jQuery().end()的内部实现及源码分析
jQuery().end()的作用是返回当前jQuery对象的上一个状态. 1.end()源码: // 所有通过pushStack方法获得的jQuery对象都可以通过end方法返回之前的状态 // ...
- jQuery-1.9.1源码分析系列(十六)ajax——响应数据处理和api整理
ajax在得到请求响应后主要会做两个处理:获取响应数据和使用类型转化器转化数据 a.获取响应数据 获取响应数据是调用ajaxHandleResponses函数来处理. ajaxHandleRespon ...
- angular源码分析:injector.js文件分析——angular中的依赖注入式如何实现的(续)
昨天晚上写完angular源码分析:angular中jqLite的实现--你可以丢掉jQuery了,给今天定了一个题angular源码分析:injector.js文件,以及angular的加载流程,但 ...
- jQuery1.9.1源码分析--数据缓存Data模块
jQuery1.9.1源码分析--数据缓存Data模块 阅读目录 jQuery API中Data的基本使用方法介绍 jQuery.acceptData(elem)源码分析 jQuery.data(el ...
- JDK源码分析(6)ConcurrentHashMap
JDK版本 ConcurrentHashMap源码分析 table:默认为null,初始化发生在第一次插入操作,默认大小为16的数组,用来存储Node节点数据,扩容时大小总是2的幂次方. nextTa ...
- JDK1.8源码分析03之idea搭建源码阅读环境
序言:上一节说了阅读源码的顺序,有了一个大体的方向,咱们就知道该如何下手.接下来,就要搭建一个方便阅读源码及debug的环境.有助于跟踪源码的调用情况. 目前新开发的项目, 大多数都是基于JDK1.8 ...
- drf源码分析系列---版本控制
版本的使用 第一步:写路由url(r'^api/(P<version>\w+)/user/$',views.UserView.as_view()), 第二步:写模块导入from rest_ ...
随机推荐
- 转载 关于case语句的优先级
对于这样的组合逻辑电路 always@(X) case(X) X1: X2: …… endcase 如果分支项包含变量X的所有取值情况,并且互相不重复,那么这样的情况,其实没有必要使用综合指令. (一 ...
- ehcache.xml配置
<?xml version="1.0" encoding="UTF-8"?> <ehcache xmlns:xsi="http: ...
- 笔记:使用 Protel 99 SE 改一块车充 PCB
笔记:使用 Protel 99 SE 改一块车充 PCB Protel 99 SE N 多年前用过,之前就再没有碰过了. 今天由于特殊原因又使用了一下. 还好有些有印象,现记录一下以免忘记. 元件转向 ...
- Six Basic Functional Areas of Spring
- Python基础-变量作用域
1.函数作用域介绍 函数作用域 Python中函数作用域分为4种情况: L:local,局部作用域,即函数中定义的变量: E:enclosing,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局 ...
- ffmpeg超详细综合教程——摄像头直播
本文的示例将实现:读取PC摄像头视频数据并以RTMP协议发送为直播流.示例包含了1.ffmpeg的libavdevice的使用2.视频解码.编码.推流的基本流程具有较强的综合性.要使用libavdev ...
- C#多线程List的非线程安全性
背景:最近在做多线程方面的工作,工作中发现多线程中很多坑,这里就有一个List添加对象的误区,这里做个分享跟大家讲讲这个坑是怎么形成的怎么样避免. 示例: 代码及错误: 如果单单只从程序逻辑上看,应该 ...
- SSD知识
不管什么接口的SSD,一般都由以下部分组成:主控,Flash,板,壳,品牌.下面本佬就这些部分一一发帖,仅供娱乐参考,不作任何推荐和偏向,有不同见解请直接发表,有任何错误,请直接指正,不为吵架,只为娱 ...
- Anaconda使用总结(文章来自网络)
序 Python易用,但用好却不易,其中比较头疼的就是包管理和Python不同版本的问题,特别是当你使用Windows的时候.为了解决这些问题,有不少发行版的Python,比如WinPython.An ...
- krpano之热点样式及文本
修改热点的样式只需要将热点引用的style样式替换即可. 动态样式代码: <style name="skin_hotspotstyle" url="zlqj_hot ...