• jquery类数组结构学习笔记


      大家都知道我们使用$()产生的jquery对象可以使用下标去获取对应下标的元素。

          举个栗子,一个页面有5个div标签,我们使用$("div")去获取到这些元素,然后我们就可以使用$("div")[0]去获取到这个元素集合的第一个元素。

      但是jquery并不是一个数组对象,那我们为什么可以使用下标去获取元素呢?查看jquery源码中的init方法,可以看到以下代码(这是我简化版的写法,省略了与该文章不相干的代码):

    function Jquery() {
         this[0] = "这里是一个id选择器选择到的节点";
         this.length = 1
    }
    
    var a = new Jquery();
    console.log(a.length)  //打印:1
    console.log(a[0]);     //打印:这是一个id选择器选择到的节点
    

      可以看到,这样就实现了类数组结构的实现,但是他依然不是一个原生数组结构,不能使用数组的push,pop,shift,unshift等原生方法,只是可以通过下标获取对应节点,还有length属性而已。

      jquery提供了一个makeArry方法,可以把类数组结构转化为真正的数组结构

    makeArray方法使用规则:

    • 一个类数组对象,它至少应该具备length属性,哪怕其值为 0,它可以没有"元素"(相当于空数组)。
    • 如果参数object没有length属性,则它不是类数组对象。jQuery.makeArray()会直接将其视作结果数组中的一个元素。
    • String对象虽然有length属性,但一般不将其视作类数组对象。该函数仍然直接将其视作结果数组中的一个元素。
    • 如果对象的最大数字属性大于或等于length属性,则以length属性为准,大于或等于其值的数字属性将被忽略。

    下面是是makeArray的源码:

    function makeArray(arr, results) {
        var ret = results || [];
        if(arr != null) {
            //如果arr是一个类数组,调用merge合到返回值
            if(isArraylike(object(arr))) {
                jQuery.merge(ret, typeof arr === "string"? [arr]: arr);
            }  else {
                //不是数组。将其放到返回数组末尾
                //等同于ret.push(arr)
                core_push.call(ret, arr);
            }
        }
    }

    下标获取元素,eq()获取元素,get()获取元素的区别:

      1.   数组Tds : 是一些jquery对象的集合

      2.   Td = Tds.eq(i):当然就是其中的某个jquery对象;

      3.   Tds[i]:此时就是原始的dom对象

      4.   Tds[i].className:调用原始dom对象的属性className;

      5.   Tds.eq(i):返回的是jquery对象,当然没有原始dom属性className

    Jquery 常用方法经典总结

    1、关于页面元素的引用 

    通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),

       不能直接调用dom定义的方法。 

    2、jQuery对象与dom对象的转换 

       普通的dom对象一般可以通过$()转换成jquery对象。 

       如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。 

       $("#msg").html(); 

       $("#msg")[0].innerHTML; 

       $("#msg").eq(0)[0].innerHTML; 

       $("#msg").get(0).innerHTML; 

    3、获取jQuery集合的某一项 

       获取其中的某一项(通过索引指定)可以使用eq或get(n)方法或者索引号获取,

       要注意,eq返回的是jquery对象,而get(n)和索引返回的是dom元素对象。

       

       $("div").eq(2).html(); //调用jquery对象的方法 

       $("div").get(2).innerHTML; //调用dom的方法属性 

  • 相关阅读:
    求X的N次乘方
    用辗转相除法求两个正整数的最大公约数
    求两、三个数中较大者的函数
    电文加密问题
    C#纯数学方法递归实现货币数字转换中文
    查找二维数组的查找之杨氏矩阵
    IT公司笔经面经
    排序2计数排序,桶排序
    windows Concurrency Runtimewindows的并行编程模型
    <c++ primer>第五部分 高级主题
  • 原文地址:https://www.cnblogs.com/yonglin/p/7998424.html
Copyright © 2020-2023  润新知