• 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

  • 相关阅读:
    vs.net2003里添加邮件发件人身份验证
    Linux下用PYTHON查找同名进程
    修改机器名后要修改IIS匿名访问用户
    [C#]使用MYSQL数据库
    JIRA OutOfMemoryErrors
    获取linux下当机堆栈
    python调用pipe
    [探讨]一次性工具软件
    GGSN
    三层交换机的作用
  • 原文地址:https://www.cnblogs.com/webph/p/6091185.html
Copyright © 2020-2023  润新知