- 注意:
- 只能通过
jq
对象来调用 - 在
njQuery
原型上添加
属性
jquery
获取jq
版本号selector
实例默认的选择器取值length
实例默认的长度push
给实例添加新元素sort
对实例中的元素进行排序splice
按照指定下标指定数量删除元素,也可替换删除的元素jquery: "1.1.0", selector: "", length: 0, push: [].push, sort: [].sort, splice: [].splice,
方法
toArray
把实例转换成数组返回get
获取指定下标的元素,获取的是原生DOMeq
获取指定下标的元素,获取的是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; }