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. Netty源码分析 (十)----- 拆包器之LineBasedFrameDecoder

    Netty 自带多个粘包拆包解码器.今天介绍 LineBasedFrameDecoder,换行符解码器. 行拆包器 下面,以一个具体的例子来看看业netty自带的拆包器是如何来拆包的 这个类叫做 Li ...

  2. Day 21 进程管理

    1.什么是进程 比如: 开发写的代码我们称为程序,那么将开发的代码运行起来.我们称为进程. 总结一句话就是: 当我们运行一个程序,那么我们将运行的程序叫进程. PS1: 当程序运行为进程后,系统会为该 ...

  3. 41 (OC)* OC的理解与动态特性

    1:动态类型(Dynamic typing),动态绑定(Dynamic binding)和动态加载(Dynamic loading). 动态类型:即运行时再决定对象的类型.简单说就是id类型.id类型 ...

  4. Django-官网查询部分翻译(1.11版本文档)-QuerySet-字段查找-06

    目录 Making queries 进行查询 创建一个对象(一条数据记录) 保存修改的表对象 保存外键字段或多对多字段(ForeignKey or ManyToManyField fields) Re ...

  5. 浅谈@RestController和@Controller的区别

    在做Spring MVC开发时,如果对@RestController或者@Controller这两个注解理解不够清晰的话,就难免会出现用混的情况.而混用的结果往往是无法实现期望的跳转结果或者是直接将跳 ...

  6. JavaScript之深入对象(一)

    在之前的<JavaScript对象基础>中,我们大概了解了对象的创建和使用,知道对象可以使用构造函数和字面量方式创建.那么今天,我们就一起来深入了解一下JavaScript中的构造函数以及 ...

  7. Go微服务容错与韧性(Service Resilience)

    Service Resilience是指当服务的的运行环境出现了问题,例如网络故障或服务过载或某些微服务宕机的情况下,程序仍能够提供部分或大部分服务,这时我们就说服务的韧性很强.它是微服务中很重要的一 ...

  8. SQL Server 内存优化表的索引设计

    测试的版本:SQL Server 2017 内存优化表上可以创建哈希索引(Hash Index)和内存优化非聚集(NONCLUSTERED)索引,这两种类型的索引也是内存优化的,称作内存优化索引,和基 ...

  9. java自学小段 产生随机数

    public class Suijishu { public static void main(String[] args) { double i=Math.random();//产生一个0-0.5的 ...

  10. java架构之路-(分布式)初识zookeeper安装与参数详解

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一致性服务的软件,提供的功 ...