jQuery 2.1.4版本的源码分析
2024-08-25 18:35:52
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
最新文章
- Python学习笔记(四)——编码和字符串
- 1.2 Quartz 2D 内存管理
- 使用Jmeter录制脚本
- MySQL数据库学习笔记(一)----MySQL 5.6.21的安装和配置(setup版)
- Excel Xll开发资料
- javascript笔记——jqGrid再次封装
- 解决IE6中ajax ‘aborted’错误请求中断
- BOM(浏览器对象模型)的一些内置对象总结
- 解决xcode7.3的一个bug的方法
- 7、创建ROS msg和srv
- Flex中单选按钮控制表格中的列的增加或减少
- 算法题丨Two Sum
- KiCad EDA 原理图库的最佳实践
- kali linux宿主机和虚拟机互访实现方案
- php(apache)切换版本
- [osg][原]osg的坐标系:使用右手法则Y轴向前、X向、右Z向上。camare的默认姿态:向下看(Z轴负向),头向前(Y轴正向)
- POJ 2572
- Spark 编程模型(中)
- 1051. [HAOI2006]受欢迎的牛【强连通分量】
- Oracle涂抹oracle学习笔记第10章Data Guard说,我就是备份