首页 > 应用开发 > Javascript > 前端知识点总结——jQuery
jQuery: 第三方的极简化的DOM操作的函数库
第三方: 下载
极简化: 是DOM操作的终极简化: 4个方面:
1\. DOM: 增删改查 2\. 事件绑定: 3\. 动画效果: 4\. Ajax
DOM操作: 学习jQuery还是在学DOM,只不过API简化了
函数库: jQuery中都是函数,用函数来解决一切问题
为什么使用:
下载: 版本:
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)攻击
引入网页: 2种:
<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类型的子对象: 2种:
jQuery API的通用特点: 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种:
可见性过滤: jQuery新增
:hidden 只能选择两种隐藏的元素
type="hidden" display:none
:visible
状态过滤: 同CSS 四大状态:
:enabled :disabled :checked :selected
表单元素过滤:
:input 选择所有表单元素: input select textarea button
:[type] 每种type都对应一种选择器
:text :password :file :button :submit ....
内容: 3种:
html代码片段:
(...).text([新内容]) .textContent
表单元素的值:
(...).empty();
属性: 3种:
HTML标准属性: $(...).attr("属性名"[,"值"])
问题: 一次只能修改一个属性的值:
解决: 同时修改多个属性的值:
$(...).attr({
属性名:值,
属性名:值,
... : ...
})
状态属性:
(...).data("属性名"[,"值"])
样式:
修改: 内联样式:
获取: 计算后的样式:
都用.css:
(...).addClass("class ... ")
(...).hasClass("class ...")
$(...).toggleClass("class ...")
按节点间关系查找:
2大类:
添加,删除,替换,克隆:
添加: 2步:
创建新元素: var
("html代码片段")
将新元素添加到DOM树:
末尾追加:
elem) //return $parent
$elem.appendTo($parent) //return $elem
开头插入:
elem) //return $parent
$elem.prependTo($parent) //return $elem
指定元素前插入:
elem)
指定元素后插入:
elem)
可简化为1步:
parent)
$parent.append("html代码片段")
移除:
(...).replaceWith(); //右替换左 //return 左
$(...).replaceAll(...); //左替换右 //return 左
克隆: $(...).clone();
浅克隆: 仅复制内容和样式,不复制行为
.clone() 默认是浅克隆
深克隆: 即复制内容和样式,又复制行为
.clone(true)
鄙视: jq中有几种事件绑定方式,分别是什么:
.bind("事件名",handler)
.unbind("事件名",handler)
3个重载:
.unbind("事件名",handler) 移除指定事件上的一个处理函数
.unbind("事件名") 移除指定事件上的所有处理函数
.unbind() 移除所有事件上的所有处理函数
.one("事件名",handler)
只能触发一次,触发后,自动解绑
.delegate("selector","事件名",handler)
其实就是利用冒泡的简化版:
鄙视: .delegate vs .bind
解绑: .undelegate()
.live/die() 废弃
.on: 统一bind和delegate的用法
解绑: .off()
DOMContentLoaded:
DOM内容(html,js)加载完成,就提前触发
何时: 操作不需要等待css和图片时,首选DOMContentLoaded
jQuery:
().ready(function(){...})
更简化: $(function(){...})
ES6: $(()=>{ ... })
window.onload=function(){
//等待页面所有内容(html,css,js,图片)都加载完才能执行
}
何时: 如果必须等待css和图片加载完,才能执行的操作,必须放在window.onload中
鄙视: jQuery中$的原理: 4种重载
DOM: mouseover mouseout
进出子元素,也会反复触发父元素上的事件
jq: mouseenter mouseleave
进出子元素,不再触发父元素上的事件
简化: 如果同时绑定mouseenter和mouseleave
可简化为.hover(enterHandler, leaveHandler) 如果enterHandler和leaveHandler可统一为一个处理函数: .hover(handler)
模拟触发:
(...).事件名()
简单动画: 3种:
显示隐藏: .show(ms) .hide(ms) .toggle(ms)
不带参数,默认: 瞬间显示隐藏,不带动画
原理: display属性实现的,不支持动画
带毫秒数参数: 会有动画效果
上滑下滑: .slideUp(ms) .slideDown(ms) .slideToggle(ms)
淡入淡出: .fadeIn(ms) .fadeOut(ms) .fadeToggle(ms)
问题: 1. 效果是固定的,不便于维护
2\. 用程序的定时器实现的动效,效率不如transition
万能动画:
$(...).animate({
css属性:目标值,
css属性:目标值,
},ms)
问题: 只支持单个数值的css属性
不支持颜色和CSS3变换
动画播放后自动执行: 动画API的最后一个参数都是一个回调函数,在动画播放完成后自动执行!
回调函数中的this,指正在播放动画的当前DOM元素
停止动画: $(...).stop();
默认: 仅停止动画队列中,当前正在播放的一个动画,队列中后续动画,依然执行!
如何停止动画,并清空队列: .stop(true)
选择器: :animated 可选择或判断一个正在播放动画的元素
遍历:
(...).each() vs $.each(数组/集合,fun)
查找:
var i=$(...).index(要找的DOM元素/jq对象)
简化: 如果在一个父元素内查找子元素:
$(子元素).index();
添加在jQuery.fn中
强调: jQuery.fn.自定义方法=function(){
//this->将来调用该方法的jq对象 }
调用时: $(...).自定义方法()
官方插件jQuery UI:
使用jQueryUi:
先引入jquery.js,因为jQuery UI是基于jQuery开发的
再引入jquery-ui.js
再编写自定义脚本
包括:
交互: 自学
效果:
部件:
什么是部件: 具有完整样式和行为的小功能
如何使用: 4步:
1\. 引入: jquery-ui.css 2\. 按照部件约定,编写html内容结构 3\. 引入jquery.js和jquery-ui.js 4\. 在自定义脚本中,找到插件的父元素,调用插件API
原理:
侵入性: 在开发者不知情的情况下,自动添加class和行为 优: 简单! 缺: 不可维护!
jQuery UI vs bootstrap
jQuery UI 傻瓜式,侵入式
优: 简单 缺: 不可维护
bootstrap 少量手动添加样式和行为(自定义扩展属性)
缺: 相比jQuery UI,稍微麻烦
优: 可定制!
文件上传:
富文本编辑器:
masonry: 彩砖墙/瀑布流
何时: 只要希望复用一块功能和样式时,都要封装为插件
如何:
前提: 必须已经用原生的html,css,jss实现了插件的功能
2种封装插件的风格:
jQuery侵入式:
将插件所需的css提取出来,保存在单独的css文件中
定义插件的js文件:
先检查是否提前引入了jQuery
定义插件函数,保存在jQuery的原型对象jQuery.fn中
侵入: 根据插件需要,为子元素自动添加class 为子元素绑定事件处理函数
使用插件:
引入插件的css文件
在body中按插件的规定,编写html内容
引入jquery.js和插件的js文件
在自定义脚本中,查找要应用插件的父元素,调用插件函数
Bootstrap DIY式:
$.ajax({
type:"get/post",
url:"xxx",
data:"rawData"/{ 变量名:值, ...}
dataType:"json",
beforeSend(){
//在发送之前触发
}
completed(){
//只要请求完成,无论成功还是失败,都触发
}
success(data){
//请求成功触发
}
error(){
//发生错误时触发
}
}).then(data=>{
... ...
}).catch(err=>{ ... })
简写:
$.get(url,data,dataType).then(data=>{ ... })
$.getJSON(url,data).then(data=>{ ... })
$.getScript(url,data)
$(父元素).load("xx.php/xx.html")
强调: 不支持then!
专门简化post请求的:
$.post(url,data,dataType).then(data=>{ ... })
跨域:
从
http://store.company.com/dir/...
允许跨域请求: link, img, script
不允许跨域: xhr对象 (ajax请求)
变通: script 需要服务器返回一段可执行的js语句
服务器应该返回包含数据的一条可执行的js语句
如何实现:
客户端实现: JSONP (填充式json)
起始jQuery的ajax api都可用, 只不过,dataType必须都写成jsonp,原理同上。
服务端: header("Access-Control-Allow-Origin:*");
允许客户端使用xhr对象跨域请求!
结语:觉得总结的还可以的话,点下赞咯,你们的鼓励是我前进的动力,谢谢各位老铁们!
自己是个从事多年开发的前端工程师,如果你对软件开发感兴趣
这里推荐一下我的前端学习资源分享qun:767273102 ,里面都是学习前端的从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴。2019最新技术,与企业需求同步。好友都在里面学习交流,每天都会有大牛定时讲解前端技术!
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69901074/viewspace-2648290/ ,如需转载,请注明出处,否则将追究法律责任。