入口函数测试

传入 ‘’ null undefined NaN 0 false

会返回一个空的jQuery对象给我们

console.log($());
console.log($(''));
console.log($(null));
console.log($(undefined));
console.log($(NaN));
console.log($(0));
console.log($(false));

传入html片段

会将创建好的DOM元素存储到jQuery对象中返回

console.log($('<p>1</p><p>2</p><p>3</p>'));
console.log($('     <div><p>1</p></div><div><p>2</p></div>     '));

传入选择器

会将找到的所有元素存储到jQuery对象中返回

console.log($('.item'));

传入数组

会将数组中存储的元素依次存储到jQuery对象中立返回

var arr = [1, 2, 3, 4, 5, 6];
console.log($(arr));

传入伪数组

会将数组中存储的元素依次存储到jQuery对象中立返回

var likeArr = {0:"lnj", 1:"33", 2:"male", length: 3};
console.log($(likeArr));

传入对象

会将传入的对象存储到jQuery对象中返回

function Person() {}
console.log($(new Person()));

传入DOM元素

会将传入的DOM元素存储到jQuery对象中返回

console.log($(document.createElement('div')));

传入基本数据类型

会将传入的基本数据类型存储到jQuery对象中返回

console.log($(123));
console.log($(true));
总结
  • 1.传入 ‘’ null undefined NaN 0 false

    • 返回空的jQuery对象
  • 2.字符串:
    • 代码片段:会将创建好的DOM元素存储到jQuery对象中返回
    • 选择器: 会将找到的所有元素存储到jQuery对象中返回
  • 3.数组:
    • 会将数组中存储的元素依次存储到jQuery对象中立返回
  • 4.除上述类型以外的:
    • 会将传入的数据存储到jQuery对象中返回

入口函数代码实现

  • 传入 ‘’ null undefined NaN 0 false, 返回空的jQuery对象
if(!selector){return this;
}
  • 字符串

    • 判断是否是代码片段 < a >

      • 根据代码片段创建所有的元素
      • 将创建好的一级元素添加到jQuery当中
      • 给jQuery对象添加length属性
      • 返回加工好的this(jQuery)
    • 判断是否是选择器
      • 根据传入的选择器找到对应的元素
      • 将找到的元素添加到njQuery上
      • 返回加工上的this
else if(njQuery.isString(selector)){// 2.1判断是否是代码片段 <a>if(njQuery.isHTML(selector)){// 1.根据代码片段创建所有的元素var temp = document.createElement("div");temp.innerHTML = selector;/*// 2.将创建好的一级元素添加到jQuery当中for(var i = 0; i < temp.children.length; i++){this[i] = temp.children[i];}// 3.给jQuery对象添加length属性this.length = temp.children.length;*/[].push.apply(this, temp.children);// 此时此刻的this是njQuery对象// 4.返回加工好的this(jQuery)// return this;}// 2.2判断是否是选择器else{// 1.根据传入的选择器找到对应的元素var res = document.querySelectorAll(selector);// 2.将找到的元素添加到njQuery上[].push.apply(this, res);// 3.返回加工上的this// return this;}
}
  • 数组

    • 真数组
    • 伪数组

碰到自定义的数组时,都要先把伪数组转换为真数组,然后再将真数组转换为伪数组

  • 真数组转换伪数组

    • [].push.apply(obj, arr);
  • 伪数组转换真数组
    • var arr = [].slice.call(obj);
else if(njQuery.isArray(selector)){/*// 3.1真数组if(({}).toString.apply(selector) === "[object Array]"){[].push.apply(this, selector);return this;}// 3.2伪数组else {// 将自定义的伪数组转换为真数组var arr = [].slice.call(selector);// 将真数组转换为伪数组[].push.apply(this, arr);return this;}*/// 将自定义的伪数组转换为真数组var arr = [].slice.call(selector);// 将真数组转换为伪数组[].push.apply(this, arr);// return this;
}
  • 除上述类型以外
else{this[0] = selector;this.length = 1;// return this;
}
return this;

extend方法

用于将一个或多个对象的内容合并到目标对象

jQuery.fn.extend = jQuery.prototype.extend

监听DOM加载

  • onload事件会等到DOM元素加载完毕, 并且还会等到资源也加载完毕才会执行
  • DOMContentLoaded事件只会等到DOM元素加载完毕就会执行回调
window.onload = function (ev) {// var res = document.querySelectorAll("div");// console.log(res);console.log("onload");//后打印
}
//IE8不支持,可以用attached
document.addEventListener("DOMContentLoaded", function () {// var res = document.querySelectorAll("div");// console.log(res);console.log("DOMContentLoaded");//先打印
});
  • document.readyState属性有如下的状态

    • uninitialized - 还未开始载入
    • loading - 载入中
    • interactive - 已加载,文档与用户可以开始交互
    • complete - 载入完成
  • onreadystatechange事件就是专门用于监听document.readyState属性的改变的

document.attachEvent("onreadystatechange", function () {if(document.readyState == "complete"){console.log("onreadystatechange");}
});

[jQuery原理] jQuery入口函数相关推荐

  1. [jQuery原理] jQuery基本结构

    1.jQuery的本质是一个闭包 2.jQuery为什么要使用闭包来实现? 为了避免多个框架的冲突 3.jQuery如何让外界访问内部定义的局部变量 window.xxx = xxx; 4.jQuer ...

  2. [jQuery原理] jQuery事件操作相关方法

    事件操作相关方法 on(type, callback) 注册事件 1.注册多个相同类型事件, 后注册的不会覆盖先注册的 2.注册多个不同类型事件, 后注册的不会覆盖先注册的 on: function ...

  3. [jQuery原理] jQuery属性操作相关方法

    属性操作相关方法 attr() 设置或者获取元素的属性节点值 attr: function (attr, value) {// 1.判断是否是字符串if(njQuery.isString(attr)) ...

  4. 【08】jQuery:01-jQuery介绍、jQuery基本使用、jQuery选择器、jQuery样式操作、jQuery效果、jQuery入口函数、jQuery对象

    文章目录 day01 - jQuery 1.1. jQuery 介绍 1.1.1 JavaScript 库 1.1.2 jQuery的概念 1.1.3 jQuery的优点 1.2. jQuery 的基 ...

  5. jQuery概述、优点、使用步骤、入口函数、jQuery对象和DOM对象之间的转换、层级选择器、属性选择器、筛选选择器、节点选择器

    jQuery简介: jQuery是一个高效.精简并且功能丰富的javascript库,它提供的API简单易学,且兼容众多浏览器,极大地简化了javascript代码开发,包含内容:HTML 元素选取. ...

  6. jQuery原理第一天

    jQuery原理 jQuery的基本结构 jQuery的本质是一个闭包 jQuery为什么要使用闭包来实现? ​ 为了避免多个框架的冲突 jQuery如何让外界访问内部定义的局部变量 ​ window ...

  7. Mr.J-- jQuery学习笔记(二十二)--入口函数

    入口函数的作用:等待页面加载完毕,有一个独立的作用域. 原生JS 和 jQuery 入口函数区别: (1)JS的window.onload事件必须要等到所有内容,以及外部图片之类的文件加载完之后,才会 ...

  8. JQuery | JQuery语言 | JQuery基础 | JQuery语言基础

    文章目录 前言 一.JQuery语言介绍 一.JQuery版本: 二.JQuery源文件说明: 三.JQuery使用条件: 二.入口函数 一.第一种入口函数 二.第二种入口函数 三.JavaScrip ...

  9. jQuery学习笔记系列(一)——入口函数,jQuery对象和DOM对象,jQuery选择器、样式操作、效果(显示隐藏、滑入滑出、淡入淡出、自定义动画、停止动画队列)

    day01 - jQuery 学习目标: 能够说出什么是 jQuery 能够说出 jQuery 的优点 能够简单使用 jQuery 能够说出 DOM 对象和 jQuery 对象的区别 能够写出常用的 ...

最新文章

  1. ​ 长达35页!美国公布未来新兴科技趋势报告
  2. python2 python3编码_Python2和Python3编码问题-从底层出发
  3. 前端学习(477):前端简介1
  4. 24套JAVA企业实战项目教程资源分享
  5. 花瓣网服务器维护一个月,花瓣网维护网站推荐-只需要这一个网站就够了
  6. 微信小程序:酒桌扑克娱乐喝酒小游戏
  7. 计算机考证一级考可以带书吗
  8. HTML中font标签中size属性值对应的像素大小
  9. 常见音频格式开源解码库汇总(持续更新)
  10. 51单片机——蜂鸣器按照次数响起1.0
  11. word2019使一级标题为第一章,二级标题为1.1的格式
  12. dns服务器地址为空,dns服务器地址为空
  13. 显示器还有卖的吗_显示器不够好,你确定修的片能好看? | 摄影早自习第1365天...
  14. Android 拨打电话
  15. Spring 的第一个Hello Spring
  16. 利用VPS服务器搭建一个FRP内网穿透服务和Web服务穿透
  17. 每周精品之读书20190325腾讯传1998-2016:中国互联网公司进化论
  18. 图片识别商品接口 API:天猫淘宝
  19. 智能驾驶事故频发,AEB为何无法「兜底」安全
  20. 五子棋比赛程序对战平台

热门文章

  1. 信安教程第二版-第12章网络安全审计技术原理与应用
  2. 验证Vsphere 5 支持大于2TB磁盘
  3. 人工智能人才缺口巨大,是否要从大学生抓起?
  4. js中setInterval与setTimeout的区别
  5. Matplotlib学习---用matplotlib画箱线图(boxplot)
  6. Emmet Cheat Sheet(Sublime编辑)
  7. SpringCloud的Archaius - 动态管理属性配置
  8. Pyplot绘图的格式
  9. 深入Java----集合----BitSet
  10. 【测试】模拟一个全表扫描的sql,对其进行优化走索引,并且将执行计划稳定到baseLine。...