1.什么是jQuery

jQuery: 第三方的极简化的DOM操作的函数库
第三方: 下载
极简化: 是DOM操作的终极简化:

1. DOM: 增删改查
2. 事件绑定:
3. 动画效果:
4. Ajax

DOM操作: 学习jQuery还是在学DOM,只不过API简化了
函数库: jQuery中都是函数,用函数来解决一切问题

为什么使用:

1.DOM操作的终极简化

2.解决了大部分浏览器兼容性问题

凡是jQuery让用的,都没有兼容性问题

 

2.如何使用

下载: 版本:   
1.x: 兼容旧浏览器 IE8

1.x.js  未压缩版  
 优点: 包含完备的注释,格式,变量名,可读性好
 缺点: 体积大,不便于传输
何时: 学习和开发阶段1.x.min.js  压缩版
 优点: 体积小,便于传输
 缺点: 去掉注释,格式,极简化了变量名
     可读性差
何时: 生产环境

2.x: 不再兼容旧浏览器
3.x: 不再兼容旧浏览器,提供了更多新特性: 
鄙视: 3.x的新特性:

1. 所有代码运行在严格模式下
2. 用for...of代替了forEach  $.each
3. 新动画API: requestAnimationFrame()
4. 支持promise
5. ajax的API防备跨站点脚本(XSS)攻击

引入网页: 

1. 引入服务器本地的js文件: <script src="js/jquery-1.x.js"

2.引入CDN网络中共享的js文件:

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.3.1.js"

原理: 引入jquery-1.x.js其实是在全局添加了一种新类型jQuery
包括: 
构造函数jQuery: 用于创建jQuery类型的子对象
原型对象jQuery.fn: 用于保存只有jQuery类型的子对象才能访问的共有方法

如何使用jQuery简化版API: 
问题: DOM元素无法使用jQuery简化版API
解决: 要想使用jQuery简化版API,必须先创建jQuery类型的子对象:

如何创建jQuery类型的子对象: 

1. 通过查找DOM元素,将DOM元素保存到新创建的jQuery对象中:

var $jq=$("selector")

什么是jQuery对象: 包含找到的DOM元素的类数组对象

2. 将已经获得的DOM元素直接保存进新创建的jQuery对象中

jQuery API的通用特点: 

1.自带遍历: 对jQuery对象整体调用一次API,等效于对内部每个元素都调用一次API

2. 一个函数两用: 给新值,就修改;没给新值,就读取原值

3. 每个函数都返回正在操作的jq对象: 链式操作!

3.查找: 选择器

基本选择器: 同CSS
id class element * ,
层次选择器: 同CSS
空格 > + ~
子元素过滤选择器: 同CSS
在各自父元素内,分别排序,从1开始
:first-child :last-child :only-child
:nth-child(2n/2n+1/odd/even/i)
基本过滤选择器(位置过滤选择器): jQuery新增
将所有符合条件的元素,保存在一个统一的集合中,在集合内统一编号。从0开始
:first/last :gt/lt/eq(i) :even/odd
属性过滤选择器: 同CSS

内容过滤: jQuery新增4种:

1. 以内容中的文本作为条件查询父元素
:contains(text) 内容包含指定文字的元素

2. 以子元素的特征作为查询条件,查询父元素
:has(selector) 包含符合selector要求的子元素的父元素

3. 空元素/非空元素: 
:parent
:empty

可见性过滤: jQuery新增
:hidden 只能选择两种隐藏的元素

type="hidden" display:none

:visible
状态过滤: 同CSS 四大状态: 
:enabled :disabled :checked :selected
表单元素过滤: 
:input 选择所有表单元素: input select textarea button
:[type] 每种type都对应一种选择器

:text  :password  :file    :button  :submit ....

 

4.修改

内容: 
html代码片段: $(...).html([新内容]) .innerHTML
纯文本内容: $(...).text([新内容]) .textContent
表单元素的值: $(...).val([新值]) .value
清空内容: $(...).empty();

属性: 
HTML标准属性: $(...).attr("属性名"[,"值"])

问题: 一次只能修改一个属性的值:
解决: 同时修改多个属性的值:
$(...).attr({
  属性名:值,
  属性名:值,
     ... : ...
})

状态属性: $(...).prop("属性名"[,bool])
自定义扩展属性: $(...).data("属性名"[,"值"])

样式:
修改: 内联样式: 
获取: 计算后的样式: 
都用.css: $(...).css("css属性名"[,值])
问题: 单独修改每个css属性,代码繁琐
解决: 用class批量修改样式:
$(...).addClass("class ... ")
$(...).removeClass("class ...")
$(...).hasClass("class ...")

$(...).toggleClass("class ...")

1.按节点间关系查找: 2大类

a.父子:

$(...).parent()
$(...).children(["selector"])
问题: 只能获得直接子元素
解决: 在所有后代中查找
$(...).find("selector")
$(...).children().first();
$(...).children().last();

b.兄弟:

$(...).prev/next()
$(...).prevAll/nextAll(["selector"])
$(...).siblings(["selector"])

2.添加,删除,替换,克隆:
添加: 2步:

a.创建新元素: var $elem=$("html代码片段")

b.将新元素添加到DOM树: 
末尾追加: $parent.append($elem) //return $parent

$elem.appendTo($parent) //return $elem

开头插入: $parent.prepend($elem) //return $parent

$elem.prependTo($parent) //return $elem

指定元素前插入: $child.before($elem)
指定元素后插入: $child.after($elem)

可简化为1步: 
$("html代码片段").appendTo($parent)
$parent.append("html代码片段")

移除: $(...).remove()
替换: $(...).replaceWith(); //右替换左 //return 左

$(...).replaceAll(...); //左替换右 //return 左

克隆: $(...).clone();
浅克隆: 仅复制内容和样式,不复制行为

.clone() 默认是浅克隆

深克隆: 即复制内容和样式,又复制行为

.clone(true)

 

5.事件

jq中有几种事件绑定方式,分别是什么:

  1. .bind("事件名",handler)
    .unbind("事件名",handler)
    3个重载:

    .unbind("事件名",handler) 移除指定事件上的一个处理函数

  2. .unbind("事件名")  移除指定事件上的所有处理函数

  3. .unbind() 移除所有事件上的所有处理函数

  4. .one("事件名",handler)
    只能触发一次,触发后,自动解绑

  5. .delegate("selector","事件名",handler)
    其实就是利用冒泡的简化版:

    1. 将利用冒泡中的目标元素判断提升到第一个参数,用选择器作为判断条件

    2. 将this重新指回了目标元素

鄙视: .delegate vs .bind

  1. 绑定位置不同: 
    .bind() 直接绑在目标元素(子元素)上
    .delegate() 绑在父元素上

  2. 事件监听的个数不同:
    .bind() 导致事件监听个数增多
    .delegate() 始终只有一个监听

  3. .bind() 无法让动态生成的新元素自动获得事件处理函数
    .delegate() 即使后来动态生成的新元素也可自动获得父元素上的事件处理函数

解绑: .undelegate()

    1. .live/die() 废弃

    2. .on: 统一bind和delegate的用法

a.代替bind: .on("事件名",handler)

b.代替delegate: .on("事件名","选择器",handler)

解绑: .off()

  1. 终极简化: .事件名(handler)

 

6.页面加载后执行

  1. DOMContentLoaded: 
    DOM内容(html,js)加载完成,就提前触发
    何时: 操作不需要等待css和图片时,首选DOMContentLoaded
    jQuery: $(document).ready(function(){ ... })
    简化: $().ready(function(){...})
    更简化: $(function(){...})

ES6: $(()=>{ ... })

  1. window.onload=function(){
    //等待页面所有内容(html,css,js,图片)都加载完才能执行
    }
    何时: 如果必须等待css和图片加载完,才能执行的操作,必须放在window.onload中

鄙视: jQuery中$的原理:

  1. 如果传入选择器字符串,则查找并创建jq对象
    优化: speed up
    如果选择器只是一个id,则调用getElementById
    如果选择器只是一个标签,则调用getElementsByTagName
    如果选择器只是一个class,则调用getElementsByClassName
    如果选择器复杂,才调querySelectorAll

  2. 如果传入DOM元素对象,则封装现有DOM元素为jq对象

  3. 如果传入html代码片段,就创建新元素:

  4. 如果传入函数,就绑定DOM内容加载后执行

 

 

7.鼠标事件

DOM: mouseover mouseout
进出子元素,也会反复触发父元素上的事件
jq: mouseenter mouseleave
进出子元素,不再触发父元素上的事件
简化: 如果同时绑定mouseenter和mouseleave

可简化为.hover(enterHandler, leaveHandler)
如果enterHandler和leaveHandler可统一为一个处理函数: .hover(handler)

模拟触发: 
$(...).trigger("事件名") => $(...).事件名()

8.动画

简单动画:

1.显示隐藏: .show(ms) .hide(ms) .toggle(ms)
不带参数,默认: 瞬间显示隐藏,不带动画

原理: display属性实现的,不支持动画

带毫秒数参数: 会有动画效果

2.上滑下滑: .slideUp(ms) .slideDown(ms) .slideToggle(ms)

3.淡入淡出: .fadeIn(ms) .fadeOut(ms) .fadeToggle(ms)

问题: 1. 效果是固定的,不便于维护

2. 用程序的定时器实现的动效,效率不如transition

万能动画: 
$(...).animate({
css属性:目标值,
css属性:目标值,
},ms)
问题: 只支持单个数值的css属性

不支持颜色和CSS3变换

动画播放后自动执行: 动画API的最后一个参数都是一个回调函数,在动画播放完成后自动执行!
回调函数中的this,指正在播放动画的当前DOM元素

前端知识点总结——jQuery(上)的更多相关文章

  1. 前端知识点总结——jQuery(下)

    1. 排队和并发 1.并发: 多个css属性同时变化放在一个animate函数内的多个css属性默认并发变化 2.排队: 多个css属性先后变化对同一个元素,先后调用多个动画API,都是排队执行原理: ...

  2. js前端分页之jQuery

    锋利的js前端分页之jQuery 大家在作分页时,多数是在后台返回一个导航条的html字符串,其实在前端用js也很好实现. 调用pager方法,输入参数,会返回一个导航条的html字符串.方法的内部比 ...

  3. Vue.js中前端知识点总结笔记

    1.框架和库的区别: 框架:framework 有着自己的语法特点.都有对应的各个模块库 library 专注于一点 框架的好处: 1.提到代码的质量,开发速度 2.提高代码的复用率 3.降低模块之间 ...

  4. Web前端-Ajax基础技术(上)

    Web前端-Ajax基础技术(上) ajax是浏览器提供一套的api,用于向服务器发出请求,接受服务端返回的响应,通过javascript调用,实现通过代码控制请求与响应,实现网络编程. ajax发送 ...

  5. 前端知识点总结(HTML)

    前端知识点总结(HTML) 一,头部常用的标签 1,link标签  (1),设置ico图标 <link rel="shortcut icon" href="favi ...

  6. 前端基础之:JQuery(可编辑版)

     前端基础之jquery   一 jQuery是什么? [1]   jQuery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. [2]   ...

  7. 《疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践》学习笔记

    <疯狂前端开发讲义jQuery+Angular+Bootstrap前端开发实践>学习笔记 二〇一九年二月十三日星期三2时28分54秒 前提:本书适合有初步HTML.CSS.JavaScri ...

  8. 进击的Python【第十六章】:Web前端基础之jQuery

    进击的Python[第十六章]:Web前端基础之jQuery 一.什么是 jQuery ? jQuery是一个JavaScript函数库. jQuery是一个轻量级的"写的少,做的多&quo ...

  9. 前端(5)之jQuery

    前端(5)之jQuery jQuery介绍 1.jQuery是一个轻量级的,兼容多浏览器的JavaScript库. 2.jQuery使用户能够更方便地处理HTML Document.Events.实现 ...

随机推荐

  1. Hive bucket表

    Hive 桶 对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分.Hive也是 针对某一列进行桶的组织.Hive采用对列值哈希,然后除以桶的个数求余 ...

  2. IntelliJ IDEA远程连接tomcat,实现单步调试

    web项目部署到tomcat上之后,有时需要打断点单步调试,如果用的是Intellij idea,可以通过如下方法实现: 开启debug端口,启动tomcat 以tomcat7.0.75为例,打开bi ...

  3. 解决chrome浏览器崩溃,再次安装不上问题

    上网重新下载了个安装包,发现安装包都打不来 很绝望,查了很多资料 很多人说要删除注册表的东西 但是打开注册表,发现一堆google的东西,手动删根本不现实 在绝望中看到了解决方案:google Upd ...

  4. CentOS7.2搭建LAMP环境

    所谓的Lamp就是:Linux+Apache+mysql+php.这里的Linux使用CentOS7.2. 0x00 开始我们可以先更新一下yum: # 升级所有包同时也升级软件和系统内核 yum - ...

  5. 理解setState

    近来在学习react源码, 最初是直接从入口一行一行的看, 结果跟着调用的函数跳转来跳去头都晕了. 后来决定带着一个目的去看源码, 每次看只研究一个东西. 一开始最想了解的就是充满魔性的setStat ...

  6. PTA A1009&A1010

    第五天 A1009 Product of Polynomials (25 分) 题目内容 This time, you are supposed to find A×B where A and B a ...

  7. vue中事件修饰符详解(stop, prevent, self, once, capture, passive)

    ==.stop== 是阻止冒泡行为,不让当前元素的事件继续往外触发,如阻止点击div内部事件,触发div事件 ==.prevent== 是阻止事件本身行为,如阻止超链接的点击跳转,form表单的点击提 ...

  8. 【python】requests模块初探(一)

    一.写在前面 Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库.它比 urllib 更加方便,可以节约我们大量的工作,完 ...

  9. 使用netsh来进行端口转发

    目录 0x00 简介 0x01 2003命令介绍 0x02 2003以后命令介绍(以08为例) 0x03 实际利用案例 0x04 流量转发 0x00 简介 netsh(Network Shell) 是 ...

  10. windows下虚拟环境virtualenv的简单操作

    使用豆瓣源安装(推荐) [推荐] python3.X安装和pip安装方法 pip install -i https://pypi.douban.com/simple XXX 1.安装virtualen ...