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

最新文章

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

热门文章

  1. springmvc中拦截器与springmvc全局异常处理器的问题
  2. Ctrl+H 浪潮Raid配置文档
  3. Toolbar使用
  4. PHP 16 个编程法则
  5. 在 windows7 中使用 vs2003 时,“在文件中查找”导致无响应的问题
  6. gen_server模块
  7. 阻塞IO(blocking IO)
  8. ll | wc -l的陷阱
  9. DataTable改变column类型
  10. MongDB安装使用