$(document.body).scrollTop()+$(document.documentElement).scrollTop():读取页面滚动条的 Y 坐标
$('body,html').scrollTop(60);:滚动到指定位置
<body style="height: 2000px;">
<div style="border:1px solid black;width:100px;height:150px;overflow:auto">
This is some text. This is some text. This is some text. This is some text.
This is some text. This is some text. This is some text. This is some text.
This is some text. This is some text. This is some text. This is some text.
This is some text. This is some text. This is some text. This is some text.
This is some text. This is some text. This is some text. This is some text.
This is some text. This is some text. This is some text. This is some text.
his is some text.
</div>
<br>
<br>
<br>
<button id="btn1">得到scrollTop</button>
<button id="btn2">设置scrollTop</button>
<script src="js/jquery-1.10.1.js"></script>
<script>
//1. 得到div或页面滚动条的坐标
$('#btn1').click(function () {
console.log($('div').scrollTop())
// console.log($('html').scrollTop()+$('body').scrollTop())
console.log($(document.documentElement).scrollTop()+$(document.body).scrollTop()) // 兼容IE/Chrome
})
//2. 让div或页面的滚动条滚动到指定位置
$('#btn2').click(function () {
$('div').scrollTop(200)
$('html,body').scrollTop(300)
})
</script>
</body>
title: 2020 年了,jQuery 是否还值得学 date: 2020-04-26 20:33 updated: 2020-04-26 20:33 cover: //cdn.wallleap.cn/img/pic/cover/202302lplEqL.jpg category: 技术杂谈 tags:
前端 description: 2020 年了,jQuery 是否还值得学
jQuery 是一个 JavaScript 库,极大地简化了原生 JavaScript 编程,源码值得学习。
可以先了解 jQuery 的一些基本用法,然后再去看源码,这样会更容易理解。
一、初识 jQuery
1、一个 JS 库
2、操作更方便
3、jQuery 的使用
(1) 引入库:本地引入、CDN 远程引入,测试版、生产版(压缩版)
(2) 使用库:函数(
$
/jQuery
)、对象($xxx
)二、jQuery 的 2 把利器
$
/jQuery
$(param)
或jQuery(param)
window.onload = function
(文档加载完成的监听)$(this)
$.xxx
$.each(obj/arr, function(key, value){})
:隐式遍历 obj/arr$.trim(str)
:去除字符串两端的空格$()
返回的就是 jQuery 对象length
/size()
:得到 DOM 元素的个数[index]
:得到指定下标对应的 DOM 元素each(function(index, domEle){})
:遍历所有 DOM 元素index()
:得到当前 DOM 元素在所有兄弟中的下标1、jQuery 核心函数
简称: jQuery 函数(
$
/jQuery
)jQuery 库向外直接暴露的就是
$
/jQuery
引入 jQuery 库后,直接使用
$
即可$(xxx)
$.xxx()
理解:
$
或jQuery
$
就是一个工具对象作为函数调用:
$(fun)
$("#div1")
$(div1Ele)
$("<div>")
作为对象使用:
$.ajax()
$.get()
$.post()
$.each()
$.trim()
$.parseJSON()
2、jQuery 核心对象
简称:jQuery 对象
得到 jQuery 对象:执行 jQuery 函数返回的就是 jQuery 对象
使用 jQuery 对象:
$obj.xxx()
理解:
属性/方法:
基本行为
size()
/length
:包含的 DOM 元素个数[index]
/get(index)
:得到对应位置的 DOM 元素each()
:遍历包含的所有 DOM 元素index()
:得到在所在兄弟元素中的下标属性:操作内部标签的属性或值
CSS:操作标签的样式
文档:对标签进行增删改操作
筛选:根据指定的规则过滤内部的标签
事件:处理事件监听相关
效果:实现一些动画效果
三、使用 jQuery 核心函数
1、选择器
(1) 说明
$()
,并将选择器作为参数传入才能起作用$(selector)
作用:根据选择器规则在整个文档中查找所有匹配的标签的数组,并封装成 jQuery 对象返回(用来查找特定页面元素)(2) 分类
基本选择器
#id
:id 选择器element
:元素选择器.class
:类选择器*
:任意标签selector1,selector2,selectorN
:取多个选择器的并集(组合选择器)selector1selector2selectorN
:取多个选择器的交集(相交选择器)层次选择器(查找子元素、后代元素、兄弟元素的选择器)
ancestor descendant
:在给定的祖先元素下的后代元素中匹配元素parent > child
:在给定的父元素下的子元素中匹配元素prev + next
:匹配所有紧接在 prev 元素后的 next 元素prev ~ siblings
:匹配 prev 元素之后的所有 siblings 元素过滤选择器(在原有选择器匹配的元素中进一步进行过滤的选择器)
:first
:last
:eq(index)
:lt
:gt
:odd
:even
:not(selector)
:header
:animated
:focus
:contains(text)
:empty
:has(selector)
:parent
:hidden
:visible
[attribute]
[attrName=value]
[attribute!=value]
[attribute^=value]
[attribute$=value]
[attribute*=value]
[attrSel1][attrSel2][attrSelN]
练习:表格隔行变色
表单选择器
:input
:text
:checkbox
:radio
:checked
:选中的2、
$
工具方法$.each()
:遍历数组或对象中的数据$.trim()
:去除字符串两边的空格$.type(obj)
:得到数据的类型$.isArray(obj)
:判断是否是数组$.isFunction(obj)
:判断是否是函数$.parseJSON(json)
:解析 json 字符串转换为 js 对象/数组练习:多 Tab 点击切换
3、ajax
ajax()
get()
post
……
四、使用 jQuery 对象
1、属性/文本
操作标签的属性, 标签体文本
操作任意属性
attr(name)
/attr(name, value)
: 读写非布尔值的标签属性prop(name)
/prop(name, value)
: 读写布尔值的标签属性removeAttr(name)
/removeProp(name)
: 删除属性操作 class 属性
addClass(classValue)
:添加 classremoveClass(classValue)
:移除指定 class操作HTML代码/文本/值
val()
/val(value)
:读写标签的valuehtml()
/html(htmlString)
:读写标签体文本练习表格隔行变色改进--->odd样式类
2、CSS
(1) style 样式(设置 CSS 样式/读取 CSS 值)
css(styleName)
: 根据样式名得到对应的值css(styleName, value)
: 设置一个样式css({多个样式对})
: 设置多个样式(2) 位置坐标(获取/设置标签的位置数据)
offset()
:读/写当前元素坐标(原点是页面左上角)position()
:读当前元素坐标(原点是父元素左上角)scrollTop()
/scrollLeft()
:读/写元素/页面的滚动条坐标scrollTop()
:读取/设置滚动条的Y坐标$(document.body).scrollTop()+$(document.documentElement).scrollTop()
:读取页面滚动条的 Y 坐标$('body,html').scrollTop(60);
:滚动到指定位置(3) 尺寸(获取/设置标签的尺寸数据)
内容尺寸
height()
:heightwidth()
:width内部尺寸
innerHeight()
:height + paddinginnerWidth()
:width + padding外部尺寸
outerHeight(false/true)
:height + padding + border 如果是 true,加上 marginouterWidth(false/true)
:width + padding + border 如果是 true,加上 margin3、筛选
(1) 过滤
在 jQuery 对象中的元素对象数组中过滤出一部分元素来
first()
last()
eq(index|-index)
:index 为正数,从前往后数;index 为负数,从后往前数filter(selector)
:对当前元素提要求not(selector)
:对当前元素提要求,并取反has(selector)
:对子孙元素提要求(2) 查找
在已经匹配出的元素集合中根据选择器查找孩子/父母/兄弟标签
children()
:子标签中找find()
:后代标签中找parent()
:父标签prevAll()
:前面所有的兄弟标签nextAll()
:后面所有的兄弟标签siblings()
:前后所有的兄弟标签4、文档处理
append()
/appendTo()
:向当前匹配的所有元素内部的最后插入指定内容preppend()
/preppendTo()
:向当前匹配的所有元素内部的最前面插入指定内容before()
:将指定内容插入到当前所有匹配元素的前面after()
:将指定内容插入到当前所有匹配元素的后面替换节点remove()
:将自己及内部的孩子都删除empty()
:掏空(自己还在)replaceWith()
:用指定内容替换所有匹配的标签删除节点5、事件
(1) 事件处理
绑定事件
eventName(function(){})
:绑定对应事件名的监听,例如$('#div').click(function(){});
on('eventName', function(){})
: 通用的绑定事件监听,例如$('#div').on('click', function(){})
常用:
click
,mouseenter
/mouseleave
mouseover
/mouseout
focus
/blur
优缺点:
eventName
:编码方便,但只能加一个监听,且有的事件监听不支持on
:编码不方便,可以添加多个监听,且更通用解绑事件
off('eventName')
:解绑对应事件名的监听,例如$('#div').off('click');
(2) 事件切换
hover(function(){}, function(){})
:同时绑定鼠标移入和移出监听区别
mouseover
与mouseenter
?mouseover
:在移入子元素时也会触发,对应mouseout
mouseenter
:只在移入当前元素时才触发,对应mouseleave
hover()
使用的就是mouseenter()
和mouseleave()
区别
on('eventName', fun)
与eventName(fun)
on('eventName', fun)
:通用,但编码麻烦eventName(fun)
:编码简单,但有的事件没有对应的方法(3) 事件委托
event.target
delegate(selector, 'eventName', function(event){}) // 回调函数中的this是子元素
undelegate('eventName')
引入:绑定事件监听的问题(新加的元素没有监听)
1、事件委托(委派/代理):
将多个子元素(li)的事件监听委托给父辈元素(ul)处理
监听回调是加在了父辈元素上
当操作任何一个子元素(li)时,事件会冒泡到父辈元素(ul)
父辈元素不会直接处理事件,而是根据
event.target
得到发生事件的子元素(li),通过这个子元素调用事件回调函数2、事件委托的 2 方:
委托方:业主 li
被委托方:中介 ul
3、使用事件委托的好处
添加新的子元素,自动有事件响应处理
减少事件监听的数量:n==>1
4、jQuery 的事件委托 API
设置事件委托:
$(parentSelector).delegate(childrenSelector, eventName, callback)
移除事件委托:
$(parentSelector).undelegate(eventName)
event.offsetX
/event.offsetY
:原点是当前元素左上角(相对于事件元素左上角)event.clientX
/event.clientY
:原点是窗口左上角(相对于视口的左上角)event.pageX
/event.pageY
:原点是页面左上角(相对于页面的左上角)event.stopPropagation()
event.preventDefault()
6、动画效果
在一定的时间内,不断改变元素样式
(1) 滑动动画(不断改变元素的高度来实现的)
slideDown()
:带动画的展开slideUp()
:带动画的收缩slideToggle()
:带动画的切换展开/收缩(2) 淡入淡出动画(不断改变元素的透明度来实现的)
fadeIn()
:带动画的显示fadeOut()
:带动画隐藏fadeToggle()
:带动画切换显示/隐藏(3) 显示/隐藏动画(不断改变元素的尺寸和透明度来实现)
show()
:(不)带动画的显示hide()
:(不)带动画的隐藏toggle()
:(不)带动画的切换显示/隐藏(4) 自定义动画
animate({结束时的样式}, time, fun)
:自定义动画效果的动画stop()
:停止动画jQuery 对象使用特点
五、jQuery 插件
1、扩展插件
扩展 jQuery 的工具方法
扩展 jQuery 对象的方法
例子:
2、jQuery 插件
理解
jquery-validation
jquery UI http://jqueryui.com/
laydate http://www.layui.com/laydate/
六、其他
1、多库共存
2、jQuery 中的
$(function(){})
3、练习
以前用原生 js 实现过的用 jQuery 来一遍
(1) 爱好选择器
(2) 增删员工记录
初级版本
进阶版本
(3) 轮播图
jQuery 文档的结构图