jQuery是什么?

jQuery就是一个javascript的类库,函数库。

jQuery是如何实现的?

  • jQuery采用的是构造函数模式进行开发的,jQuery是一个类
  • 常用的方法(CSS、属性、筛选、事件、动画、文档处理)都是定义在jQuery.prototype上的 ,只有jQuery的实例才能使用这些方法

我们可否实现一个jQuery的API?

可以!
首先我们应该知道jQuery是一个函数对象,我们把需要的函数(一段可多次使用的代码块)放在里面,把它当做一个类库,函数库。其实jQuery不仅仅是一个类(在它的原型上定义了很多的方法,每一个jQuery的实例都可以使用这些方法),它还是一个普通的对象,在jQuery本身的属性中还增加了一系列的方法。
但是我们可以用封装一个函数的方式并且声明命名空间来建立一个jQuery对象,

建立jQuery函数库

  • 首先在 window 对象中定义一个 jQuery 方法,该方法接收一个参数 nodeOrSelector。
  • 在方法 jQuery 中,调用 document.querySelectorAll,将传入的字符串参数 nodeOrSelector把获取到的字符- 串通过该 API 获取成一个对象(伪数组),存入变量 nodes中。
  • 给 nodes设置两个方法: nodes.addClass 以及 nodes.text 。
  • 两个方法都会将 nodes对象进行遍历,然后通过参数 classes或 text对 nodes里的节点进行操作。
  • 返回该对象。
  • 将 jQuery 的内存地址赋值给 window.$ 。
  • 此时,将需要设置的元素 ('nodes') (括号里应为字符串)赋值给变量nodes,即可通过 $nodes调用 addClass 或 text方法。
window.jQuery = function(nodeOrSelector){
let nodes={}
nodes = document.querySelectorAll(nodeOrSelector)
nodes.addClass = function(classes){
classes.forEach((value) => {
for(let i=0;i<nodes.lenght;i++){
nodes[i].classList.add(value)
}
}) }
nodes.text = function(text){
if(text===undefined){
var texts=[]
for(let i=0;i<nodes.lenght;i++){
texts.push(nodes[i].textContent)
}
return texts
}else{
for(let i=0;i<nodes.lenght;i++){
nodes.textContent = text
} }
}
return nodes }
window.$ = jQuery var $div = $('div')
$div.addClass('red') // 可将所有 div 的 class 添加一个 red
$div.setText('hi') // 可将所有 div 的 textContent 变为 hi

我们获取的是jQuery对象(他是jQuery的实例)不是我们的原生js对象

jQuery:$("#div1")
JS:document.getElementById("div1") 原生JS的对象不能直接的使用jQuery的方法,同理,jQuery的对象也不能使用原生js的方法
$("#div1").className = "box"; no
document.getElementById("div1").addClass();

调用jQuery

  • $是一个别名jQuery,jQuery是函数,
  • $div是返回值
  • jquery基本语法:例:$('选择器').方法()

为什么要学jQuery?

  • 各个浏览器之间的兼容性
  • jQuery 功能丰富,还有动画、AJAX 等模块,不止 DOM 操作
  • jQuery:写的更少,做的更多

如何使用css的语法来选择元素?

jquery基本语法:$('选择器').css('属性','值')

jquery 的编程思想:

查询+操作,内置循环,迭代

jquery基本语法:

例:$('选择器').方法()

jQuery对象与DOM对象之间的转换方法

jQuery对象转成DOM对象:

(1)jQuery对象实际上是一个数据对象,可以通过[index]方法获得相应的DOM对象。

      var $v=$("#v"); //得到jQuery对象
var v=$("v")[0];//转换成DOM对象

(2)jQuery本身可以通过.get(index)方法得到相应的DOM对象。

       var $v=$("#v"); //得到jQuery对象
var v=$v.get(0);
DOM对象转成jQuery对象:

对于已经是一个DOM对象,只需要用$()将DOM对象包装起来,就能获得jQuery对象。

     var v=document.getElementById("v"); //得到DOM对象
var $v=$(v); //转成jQuery对象

转换后可以任意使用jQuery的方法了


jquery固有的方法:

jQuery是如何实现?的更多相关文章

  1. Angular杂谈系列1-如何在Angular2中使用jQuery及其插件

    jQuery,让我们对dom的操作更加便捷.由于其易用性和可扩展性,jQuer也迅速风靡全球,各种插件也是目不暇接. 我相信很多人并不能直接远离jQuery去做前端,因为它太好用了,我们以前做的东西大 ...

  2. jQuery UI resizable使用注意事项、实时等比例拉伸及你不知道的技巧

    这篇文章总结的是我在使用resizable插件的过程中,遇到的问题及变通应用的奇思妙想. 一.resizable使用注意事项 以下是我在jsfiddle上写的测试demo:http://jsfiddl ...

  3. Jquery的点击事件,三句代码完成全选事件

    先来看一下Js和Jquery的点击事件 举两个简单的例子 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&q ...

  4. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  5. jquery和Js的区别和基础操作

    jqery的语法和js的语法一样,算是把js升级了一下,这两种语法可以一起使用,只不过是用jqery更加方便 一个页面想要使用jqery的话,先要引入一下jqery包,jqery包从网上下一个就可以, ...

  6. jQuery之ajax实现篇

    jQuery的ajax方法非常好用,这么好的东西,你想拥有一个属于自己的ajax么?接下来,我们来自己做一个简单的ajax吧. 实现功能 由于jq中的ajax方法是用了内置的deferred模块,是P ...

  7. 利用snowfall.jquery.js实现爱心满屏飞

    小颖在上一篇一步一步教你用CSS画爱心中已经分享一种画爱心的方法,这次再分享一种方法用css画爱心,并利用snowfall.jquery.js实现爱心满屏飞的效果. 第一步: 利用伪元素before和 ...

  8. jQuery的61种选择器

    The Write Less , Do More ! jQuery选择器 1. #id : 根据给定的ID匹配一个元素 <p id="myId">这是第一个p标签< ...

  9. jquery.uploadify文件上传组件

    1.jquery.uploadify简介 在ASP.NET中上传的控件有很多,比如.NET自带的FileUpload,以及SWFUpload,Uploadify等等,尤其后面两个控件的用户体验比较好, ...

  10. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:通过QMainWindow的resizeDocks方法调整QDockWidget停靠窗大小

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 QMainWindow的resizeDocks用于将QMainWind ...

  2. PyQt(Python+Qt)学习随笔:QScrollArea滚动区域的scrollAreaWidgetContents、widget及setWidget等相关概念解释

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在Designer中设计将一个lable放到滚动区域上,使用PyUIC生成代码后,可以看到除了QSc ...

  3. 第十一章 Python 支撑正则表达式处理的re模块

    re模块是Python中支持正则表达式处理的模块,老猿学了之后,发现这部分内容太多,要表述清楚需要开单章才能写清楚,但老猿觉得re模块的使用对多数人来说要通过教程学习去熟练掌握很难,需要经常接触练习加 ...

  4. scrapy爬虫爬取小姐姐图片(不羞涩)

    这个爬虫主要学习scrapy的item Pipeline 是时候搬出这张图了: 当我们要使用item Pipeline的时候,要现在settings里面取消这几行的注释 我们可以自定义Item Pip ...

  5. Photoshop 2020特别版,内置多款实用插件,功能强大

    Adobe Photoshop 2020特别21.2.1.265版 组件精简 同时优化软件配置,添加多款实用强大的插件,具体详细修改精简内容如下: -精简运行库及更新组件: -精简创意云Creativ ...

  6. 【Alpha冲刺阶段】Scrum Meeting Daily1

    1.会议简述 会议开展时间 2020/5/22 8:30-9:00 PM 会议基本内容摘要 讨论了基础的分工,以及明确了各自模块需要完成的任务 参与讨论人员 全体参与 特别说明 会议需要每天都开展!! ...

  7. windows安装程序无法将windows配置为在此计算机上运行

    ----------------------------------------------- 解决办法: 当出现如上提示的时候,按下shift+f10 会打开命令窗口,进入到C:\windows\s ...

  8. 题解-CF1401E Divide Square

    题面 CF1401E Divide Square 给一个正方形平面边长为 \(10^6\),给 \(n\) 条横线段和 \(m\) 条竖线段,每条线段都与正方形边缘相交且一条直线上不会有两条线段,求被 ...

  9. Python 中的哈希表

    Python 中的哈希表:对字典的理解   有没有想过,Python中的字典为什么这么高效稳定.原因是他是建立在hash表上.了解Python中的hash表有助于更好的理解Python,因为Pytho ...

  10. MVCAdmin项目知识点记录

    1.在过滤器中,用ViewBag类似的东西,要((ViewResult)filterContext.Result).ViewBag. 2.Controller中自己定义的非Action方法中(包括构造 ...