HTML代码:

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
</ul>
<button>按钮</button>
<div></div>
<div id="test">Click Here!</div>

一、核心

1、jQuery对象访问

//each 遍历
    $("ul>li").each(function (index) {   //index是元素的索引
        console.log(this);   //this指向每一个索引对应的dom对象
    });

    //selector 获取到原始的选择器
    console.log($("ul>li").selector);   //ul>li

    //context  返回传给jQuery()的原始的DOM节点内容,即jQuery()的第二个参数。如果没有指定,那么context指向当前的文档(document)。
    console.log($("ul>li").context);  //document
    //jQuery对象第二个参数 是前边匹配器的父元素 并且是原生js对象
    console.log($("li", document.body).context);   //body
    console.log($("li", $("ul")[0]).context);   //ul

    //length size() 获取jQuery对象中元素的个数
    console.log($("ul>li").length);  //4
    console.log($("ul>li").size());  //4

    //get 通过索引获取元素
    console.log($("ul>li").get(1));  //与eq()选择器类似

    //index 不加参数,获取当前元素的索引;
    console.log($("ul>li").eq(1).index());   //1
    //如果是集合,默认获取第一个
    console.log($("ul>li").index());   //0
    //参数可以使jQuery对象
    console.log($("ul>li").index($("ul>li").eq(1)));  //1
    //参数也可以是dom对象
    console.log($("ul>li").index($("ul>li").eq(3)[0]));  //3

2、数据缓存

//data() 在元素上存放数据(可以存放任何格式的数据,而不仅仅是字符串,可以是key-value形式的数据),返回jQuery对象。
    //存放字符串数据
    console.log($("button").data("key-val", "123"));
    //获取存放的数据  参数为存储的数据名
    console.log($("button").data("key-val"));  //123
    //在一个div上存取名/值对数据
    $("div").data("test", { first: 16, last: "pizza!" });
    console.log($("div").data("test").first);  //16;
    console.log($("div").data("test").last);  //pizza!;
    
    //removeData() 在元素上移除存放的数据 参数为存储的数据名
    $("button").removeData("key-val");
    console.log($("button").data("key-val"));  //undefined

3、扩展——插件机制

(1)扩展jQuery对象本身,用来在jQuery命名空间上增加新函数。

$.extend 扩展的方法使用时 直接$.

$.extend({
        isNumber: function () {
            console.log("检测是否是数字", this);   //this指向jQuery本身
        },
        isArrayTo: function () {
            console.log("检测是否是数组");
        }
    });
    
    $.isNumber();

(2)扩展jQuery元素集(通常用来制作插件)

$.fn.extend({
        MyMap: function () {
            console.log(this);  //this指向当前的jQuery对象
        }
    });
    $("ul>li").MyMap();

(3)合并对象

var a={
        a:1,
        b:2,
        d:5
    };
    var b={
        a:2,
        b:3,
        c:4
    };
    //原生js的方法合并对象
    console.log(Object.assign({}, a, b));   //{a: 2, b: 3, d: 5, c: 4}
    //jQuery方法合并
    console.log($.extend({}, a, b));   //{a: 2, b: 3, d: 5, c: 4}

二、工具

1、数组和对象操作

$.each() 通用例遍方法,可用于例遍对象和数组。

不同于例遍 jQuery 对象的 $().each() 方法,此方法可用于例遍任何对象。
回调函数拥有两个参数:第一个为 index,第二个为 value。
如果需要退出 each 循环可使回调函数返回 false,其它返回值将被忽略。

//遍历jQuery对象
    $.each($("ul>li"),function(index,val){
        console.log(index,val);
    });
    //遍历数组
    $.each([1,2,3,4],function(index,val){
        console.log(index, val);
    });

$.makeArray() 类数组转化为数组:

console.log($("li"));  //类数组  init(4) [li, li, li, li, prevObject: init(1), context: document, selector: "li"]
    console.log($.makeArray($("li")));  //转化为数组   [li, li, li, li]

map映射:

console.log($.map($("li"), function (ele, index) {
        return ele;
    }));   //[li, li, li, li]

确定第一个参数在数组中的位置,从0开始计数(如果没有找到则返回 -1 )。

console.log($.inArray(5, [1, 2, 3]));   //-1
    console.log($.inArray($("li").eq(0)[0], $("li")));   //0

把jQuery集合中所有DOM元素恢复成一个数组。

console.log($("li").toArray());  //[li, li, li, li]

grep() 使用过滤函数过滤数组元素。
第三个参数为false或未设置,则函数返回数组中由过滤函数返回 true 的元素集;第三个参数如果为true,则返回过滤函数中返回 false 的元素集。

console.log($.grep([0, 1, 2], function (n, i) {
        return n > 0;
    }, true));    //[0]

合并数组,去除重复项:

//合并数组
    console.log($.merge([0, 1, 2], [2, 3, 4]));  //[0, 1, 2, 2, 3, 4]
    //去除重复项
    console.log($.unique($.merge([0, 1, 2], [2, 3, 4])));  //[0, 1, 2, 3, 4]

2、函数操作

$.proxy() 改变函数的作用域——this指向。

当有事件处理函数要附加到元素上,但他们的作用域实际是指向另一个对象时,这个方法最有用了。此外,jQuery能够确保即便你绑定的函数是经过$.proxy()处理过的函数,你依然可以传递原先的函数来准确无误地取消绑定。请参考下面的例子。

这个方法有两种用法:
第一种:
$.proxy(function,context) function:将要被改变作用域的函数。
context:一个object,那个函数的作用域会被设置到这个object上来。
第二种:
$.proxy(context,name) context:一个object,那个函数的作用域会被设置到这个object上来。
name:改变上下文中的函数名(这个函数必须是前一个参数 ‘context’ 对象的属性)。

//强制设置函数的作用域,让this指向obj而不是#test对象。
    var obj = {
        name: "John",
        test: function() {
            alert( this.name );
            $("#test").unbind("click", obj.test);
        }
    };

    $("#test").click( jQuery.proxy( obj, "test" ) );   //John

    //以下代码跟上面那句是等价的
    //$("#test").click( jQuery.proxy( obj.test, obj ) );   //John

    //如果不改变作用域
    //$("#test").click( obj.test );    //undefined

3、测试操作

//检测是否是数组
    console.log($.isArray(1));   //false
    
    //检测是否是函数
    function bok(){
        console.log(a);
    }
    console.log($.isFunction(bok));  //true
    
    //检测是否是对象
    console.log($.isEmptyObject({}));   //true
    console.log($.isEmptyObject(obj));  //false
    
    //检测一个DOM节点是否包含另一个DOM节点
    console.log($.contains($("ul")[0], $("ul>li").eq(0)[0]));  //true
    
    //检测数据类型
    console.log($.type("text"));  //string
    
    //测试对象是否是纯粹的对象(通过 "{}" 或者 "new Object" 创建的)
    console.log($.isPlainObject(obj));  //true
    
    //检测是否是数字
    console.log($.isNumeric(1));   //true

4、字符串操作

$.trim(" a b c d ");  //两端去空