深入学习jquery源码之jQuery的核心参数

深入学习jquery源码之jQuery的核心参数

jQuery([selector,[context]])

概述

这个函数接收一个包含 CSS 选择器的字符串,然后用这个字符串去匹配一组元素。

jQuery 的核心功能都是通过这个函数实现的。 jQuery中的一切都基于这个函数,或者说都是在以某种方式使用这个函数。这个函数最基本的用法就是向它传递一个表达式(通常由 CSS 选择器组成),然后根据这个表达式来查找所有匹配的元素。

默认情况下, 如果没有指定context参数,$()将在当前的 HTML document中查找 DOM 元素;如果指定了 context 参数,如一个 DOM 元素集或 jQuery 对象,那就会在这个 context 中查找。在jQuery 1.3.2以后,其返回的元素顺序等同于在context中出现的先后顺序。

选择器 部分获取更多用于 expression 参数的 CSS 语法的信息。

参数

selector,[context] String,Element,/jQuery

selector:用来查找的字符串

context:作为待查找的 DOM 元素集、文档或 jQuery 对象。

element Element

一个用于封装成jQuery对象的DOM元素

object object

一个用于封装成jQuery对象

elementArray Element

一个用于封装成jQuery对象的DOM元素数组。

jQuery object object

一个用于克隆的jQuery对象。

jQuery()

返回一个空的jQuery对象。

找到所有 p 元素,并且这些元素都必须是 div 元素的子元素。

$("div > p");

设置页面背景色。

$(document.body).css( "background", "black" );

隐藏一个表单中所有元素。

$(myForm.elements).hide()

在文档的第一个表单中,查找所有的单选按钮(即: type 值为 radio 的 input 元素)。

$("input:radio", document.forms[0]);

在一个由 AJAX 返回的 XML 文档中,查找所有的 div 元素。

$("div", xml.responseXML);

 

 

jQuery(html,[ownerDocument])

概述

根据提供的原始 HTML 标记字符串,动态创建由 jQuery 对象包装的 DOM 元素。同时设置一系列的属性、事件等。

你可以传递一个手写的 HTML 字符串,或者由某些模板引擎或插件创建的字符串,也可以是通过 AJAX 加载过来的字符串。但是在你创建 input 元素的时会有限制,可以参考第二个示例。当然这个字符串可以包含斜杠 (比如一个图像地址),还有反斜杠。当你创建单个元素时,请使用闭合标签或 XHTML 格式。例如,创建一个 span ,可以用$("") 或 $("") ,但不推荐 $("")。在jQuery 中,这个语法等同于$(document.createElement("span")) 。

在jQuery 1.8中,通过$(html,props), 您可以使用任何jQuery对象的方法或插件。在此之前,你只能使用一个方法名的短名单,并有没有成文的方式添加到列表中。现在并不需要是一个列表,在所有!然而,请注意,这可能会导致你的代码的行为改变,如果插件添加后,有相同的名称作为HTML属性。

参数

html,[ownerDocument] String,Document

html:用于动态创建DOM元素的HTML标记字符串

ownerDocument:创建DOM元素所在的文档

html,props String,Map

html:用于动态创建DOM元素的HTML标记字符串

props:用于附加到新创建元素上的属性、事件和方法

动态创建一个 div 元素(以及其中的所有内容),并将它追加到 body 元素中。在这个函数的内部,是通过临时创建一个元素,并将这个元素的 innerHTML 属性设置为给定的标记字符串,来实现标记到 DOM 元素转换的。所以,这个函数既有灵活性,也有局限性。

$("

Hello

").appendTo("body");

创建一个 元素必须同时设定 type 属性。因为微软规定 元素的 type 只能写一次。

// 在 IE 中无效:
$("").attr("type", "checkbox");
// 在 IE 中有效:
$("");

动态创建一个 div 元素(以及其中的所有内容),并将它追加到 body 元素中。在这个函数的内部,是通过临时创建一个元素,并将这个元素的 innerHTML 属性设置为给定的标记字符串,来实现标记到 DOM 元素转换的。所以,这个函数既有灵活性,也有局限性。

$("
", { "class": "test", text: "Click me!", click: function(){ $(this).toggleClass("test"); } }).appendTo("body");

创建一个 元素,同时设定 type 属性、属性值,以及一些事件。

$("", {
  type: "text",
  val: "Test",
  focusin: function() {
    $(this).addClass("active");
  },
  focusout: function() {
    $(this).removeClass("active");
  }
}).appendTo("form");

 

length

概述

jQuery 对象中元素的个数。

这个函数的返回值与 jQuery 对象的'length' 属性一致。

计算文档中所有图片数量

 
$("img").length; //2

 

size()

概述

jQuery 对象中元素的个数。

当前匹配的元素个数。 size 将返回相同的值。

计算文档中所有图片数量

 
$("img").size();//2

 

selector

概述

返回传给jQuery()的原始选择器。

换句话说,就是返回你用什么选择器来找到这个元素的。可以与context一起使用,用于精确检测选择器查询情况。这两个属性对插件开发人员很有用。

确定查询的选择器

$("ul")
  .append("
  • " + $("ul").selector + "
  • ") .append("
  • " + $("ul li").selector + "
  • ") .append("
  • " + $("div#foo ul:not([class])").selector + "
  • ");
    ul
    ul li
    div#foo ul:not([class])

     

    context

    概述

    返回传给jQuery()的原始的DOM节点内容,即jQuery()的第二个参数。如果没有指定,那么context指向当前的文档(document)。

    可以与selector一起使用,用于精确检测选择器查询情况。这两个属性对插件开发人员很有用。

    检测使用的文档内容

    $("ul")
      .append("
  • " + $("ul").context + "
  • ") .append("
  • " + $("ul", document.body).context.nodeName + "
  • ");
    [object HTMLDocument]  //如果是IE浏览器,则返回[object]
    BODY

     

    jquery源码

    (function (global, factory) {
    
        if (typeof module === "object" && typeof module.exports === "object") {
            // For CommonJS and CommonJS-like environments where a proper window is present,
            // execute the factory and get jQuery
            // For environments that do not inherently posses a window with a document
            // (such as Node.js), expose a jQuery-making factory as module.exports
            // This accentuates the need for the creation of a real window
            // e.g. var jQuery = require("jquery")(window);
            // See ticket #14549 for more info
            module.exports = global.document ?
                factory(global, true) :
                function (w) {
                    if (!w.document) {
                        throw new Error("jQuery requires a window with a document");
                    }
                    return factory(w);
                };
        } else {
            factory(global);
        }
    
        // Pass this if window is not defined yet
    }(typeof window !== "undefined" ? window : this, function (window, noGlobal) {
    
        // Can't do this because several apps including ASP.NET trace
        // the stack via arguments.caller.callee and Firefox dies if
        // you try to trace through "use strict" call chains. (#13335)
        // Support: Firefox 18+
        //
    
        var deletedIds = [];
    
        var slice = deletedIds.slice;
    
        var concat = deletedIds.concat;
    
        var push = deletedIds.push;
    
        var indexOf = deletedIds.indexOf;
    
        var class2type = {};
    
        var toString = class2type.toString;
    
        var hasOwn = class2type.hasOwnProperty;
    
        var support = {};
    
        var version = "1.11.3",
    
            // Define a local copy of jQuery
            jQuery = function (selector, context) {
                // The jQuery object is actually just the init constructor 'enhanced'
                // Need init if jQuery is called (just allow error to be thrown if not included)
                return new jQuery.fn.init(selector, context);
            }
    
        jQuery.fn = jQuery.prototype = {
            // The current version of jQuery being used
            jquery: version,
    
            constructor: jQuery,
    
            // Start with an empty selector
            selector: "",
    
            // The default length of a jQuery object is 0
            length: 0,
    		// For internal use only.
            // Behaves like an Array's method, not like a jQuery method.
            push: push,
            sort: deletedIds.sort,
            splice: deletedIds.splice
        };
    
    	
    	    jQuery.extend = jQuery.fn.extend = function () {
            var src, copyIsArray, copy, name, options, clone,
                target = arguments[0] || {},
                i = 1,
                length = arguments.length,
                deep = false;
    
            // Handle a deep copy situation
            if (typeof target === "boolean") {
                deep = target;
    
                // skip the boolean and the target
                target = arguments[i] || {};
                i++;
            }
    
            // Handle case when target is a string or something (possible in deep copy)
            if (typeof target !== "object" && !jQuery.isFunction(target)) {
                target = {};
            }
    
            // extend jQuery itself if only one argument is passed
            if (i === length) {
                target = this;
                i--;
            }
    
            for (; i < length; i++) {
                // Only deal with non-null/undefined values
                if ((options = arguments[i]) != null) {
                    // Extend the base object
                    for (name in options) {
                        src = target[name];
                        copy = options[name];
    
                        // Prevent never-ending loop
                        if (target === copy) {
                            continue;
                        }
    
                        // Recurse if we're merging plain objects or arrays
                        if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)))) {
                            if (copyIsArray) {
                                copyIsArray = false;
                                clone = src && jQuery.isArray(src) ? src : [];
    
                            } else {
                                clone = src && jQuery.isPlainObject(src) ? src : {};
                            }
    
                            // Never move original objects, clone them
                            target[name] = jQuery.extend(deep, clone, copy);
    
                            // Don't bring in undefined values
                        } else if (copy !== undefined) {
                            target[name] = copy;
                        }
                    }
                }
            }
    
            // Return the modified object
            return target;
        };
    	
    	    // Populate the class2type map
        jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function (i, name) {
            class2type["[object " + name + "]"] = name.toLowerCase();
        });
    	
    	 // The number of elements contained in the matched element set
        jQuery.fn.size = function () {
            return this.length;
        };
    
        jQuery.fn.andSelf = jQuery.fn.addBack;
    	
    }));

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    你可能感兴趣的:(Jquery源码)