zoukankan      html  css  js  c++  java
  • jQuery 源码基本框架

    抽丝剥茧, 7000+ 行的 jQuery 源码基本可以概括为以下的伪代码

    (function (window, undefined) {
        //将 document 封装成 jQuery 对象并缓存
        var rootjQuery,
    
        //dom ready 事件的委托队列
            readyList,
    
        //快速地识别 html 标记 如 <div> 或者 #id
            rquickExpr = /^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/,
    
            jQuery = function (selector, context) {
                return new jQuery.fn.init(selector, context, rootjQuery);
            };
    
        jQuery.fn = jQuery.prototype = {
            constructor: jQuery,
            init: function (selector, context, rootjQuery) {
    
                // $(""), $(null), $(undefined), $(false)
                if (!selector) {
                    return this;
                }
    
                var match = rquickExpr.exec(selector);
    
                // $('<div></div>')
                jQuery.parseHTML(match[1])
                return this;
    
                // $(#id)
                return document.getElementById(selector);
    
                // $('.class'),  $('.class', context),  $('#class', context)
                // 其中 context 是jQuery元素
                return (context || rootjQuery).find(selector);
    
                // $('.class', domElm)
                return this.constructor(context).find(selector);
    
                // selector is function
                return rootjQuery.ready(selector);
    
    
                return jQuery.makeArray(selector, this);
            },
            ready: function (fn) {
                // Add the callback
                jQuery.ready.promise().done(fn);
    
                return this;
            }
        }
    
        jQuery.init.prototype = jQuery.fn;
    
        jQuery.extend = jQuery.fn.extend = function () {
        };
    
        rootjQuery = jQuery(document);
    
        // Sizzle 代码
        (function (window, undefined) {
    
            function Sizzle(selector, context, results, seed) {
                if (support.qsa) {
                    return querySelectorAll(selector)
                }
    
                return select(selector.replace(rtrim, "$1"), context, results, seed);
            }
    
            function select(selector, context, results, seed) {
                var match = tokenize(selector);
            }
    
            function tokenize(selector, parseOnly) {
    
            }
    
            jQuery.find = Sizzle;
        })(window);
    
        // 对 jQuery 对象的扩展
        jQuery.extend({});
    
        // 对 jQuery.fn 对象的扩展
        jQuery.fn.extend({});
    
        window.$ = window.jQuery = jquery;
    
    })(window);
  • 相关阅读:
    不知如何摧毁Kendo UI for jQuery小部件?这份指南不得不看
    MyEclipse导航代码第二弹,Java开发更便捷
    索引扫描与索引查找区别
    Chrome使用技巧
    什么是中台?所有的中台都是业务中台
    跨域资源共享CORS详解
    多线程之入门起步(三)
    聊天程序——基于Socket、Thread (二)
    多线程的相关概念(一)
    使用BCP实用工具导出导入数据
  • 原文地址:https://www.cnblogs.com/straybird/p/3501074.html
Copyright © 2011-2022 走看看