• 注意:
  • 只能通过jq对象来调用
  • njQuery原型上添加

  • 属性

    • jquery 获取jq版本号
    • selector 实例默认的选择器取值
    • length 实例默认的长度
    • push 给实例添加新元素
    • sort 对实例中的元素进行排序
    • splice 按照指定下标指定数量删除元素,也可替换删除的元素

      jquery: "1.1.0",
      selector: "",
      length: 0,
      push: [].push,
      sort: [].sort,
      splice: [].splice,

  • 方法

    • toArray 把实例转换成数组返回
    • get 获取指定下标的元素,获取的是原生DOM
    • eq 获取指定下标的元素,获取的是jQuery类型的实例对象
    • first 获取实例中第一个元素,获取的是jQuery类型的实例对象
    • last 获取实例中的最后一个元素,获取的是jQuery类型的实例对象
    • each 遍历实例,把遍历到的数据传给回调使用
    • map 遍历实例,把遍历到的数据传给回调使用,然后把回调的返回值收集起来组成一个新的数组返回

      toArray: function () {
      return [].slice.call(this);
      },
      get: function (num) {
      //没有传递参数
      if (arguments.length === 0) {
        return this.toArray();
      }
      //传递的是正数
      else if (num >= 0) {
        return this[num];
      }
      //传递的是负数
      else {
        return this[this.length + num];
      }
      },
      eq: function (num) {
      //没有传递参数
      if (arguments.length === 0) {
        return new njQuery();
      }
      //传递的是正数或者负数
      else {
        return njQuery(this.get(num));
      }
      },
      first: function () {
      return this.eq(0);
      },
      last: function () {
      return this.eq(-1);
      },
      each: function () {
      // 遍历jQuery对象,this指的是jQuery对象
      njQuery.each(this, fn);
      },
      map:function (fn) {
      return njQuery.map(this, fn);
      }
    • 需要在extend方法的对象上添加each和map方法,这样才能通过类调用静态方法

      each: function (obj, fn) {
      if (njQuery.isArray(obj)) {
        //是数组
        for (var i = 0; i < obj.length; i++) {
            // var res = fn(i, obj[i]);
            var res = fn.call(obj[i], i, obj[i]);
            if (res === true) {
                continue;
            } else if (res === false) {
                break;
            }
        }
      } else if (njQuery.isObject(obj)) {
        //是对象
        for (var key in obj) {
            // var res = fn(key, obj[key]);
            var res = fn.call(obj[key], key, obj[key]);
            if (res === true) {
                continue;
            } else if (res === false) {
                break;
            }
        }
      }
      //return是因为each遍历谁就返回谁
      return obj;
      },
      map: function (obj, fn) {
      //定义空数组,不处理则返回空数组
      var res = [];
      if (njQuery.isArray(obj)) {
        for (var i = 0; i < obj.length; i++) {
            var temp = fn(obj[i], i);
            //判断是否元素为空
            if (temp) {
                res.push(temp);
            }
        }
      } else if (njQuery.isObject(obj)) {
        for (var key in obj) {
            var temp = fn(obj[key], key);
            //判断是否元素为空
            if (temp) {
                res.push(temp);
            }
        }
      }
      return res;
      }

最后修改:2021 年 03 月 15 日 11 : 28 PM
如果觉得我的文章对你有用,请随意赞赏!