主题
jQuery
jQuery 是一个高效、精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器,这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。
截止本文档最后更新的时间,jQuery 已经发布了第一个测试版本,最新的正式版为 3.7.4。
使用 jQuery 前,需要先引入 jQuery。可以前往 官网 下载最新版,也可以引用本站 jQuery 的地址。
html
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<!-- 或者 -->
<script src="https://static.qi1.website/js/jquery.js"></script>
使用 - 选择器
jQuery 支持所有 document.querySelector 的选择器类型。
jQuery 的使用语法为 $("选择器").方法(参数)
。
名称 | 用法 | 描述 |
---|---|---|
ID选择器 | $("#id"); | 获取指定 ID 的元素 |
类选择器 | $(".class"); | 获取同一类 class 的元素 |
标签选择器 | $(“div”); | 获取同一类标签的所有元素 |
并集选择器 | $(“div,li,p”); | 使用逗号分隔,获取多个元素 |
交集选择器 | $(“div.show”); | 获取 class 为 show 的 div 元素 |
全选选择器 | $("*"); | 匹配所有元素 |
子代选择器 | $(“ul>li”); | 使用 > 号,获取儿子层级的元素;注意,并不会获取孙子层级的元素 |
后代选择器 | $(“ul li”); | 使用空格,代表后代选择器,获取 ul 下的所有 li 元素,包括孙子等 |
:eq(index) | $(“li:eq(1)”); | 获取到的li元素中,选择索引号为1的元素,索引号index从0开始。 |
:odd | $(“li:odd”); | 获取到的li元素中,选择索引号为奇数的元素 |
:even | $(“li:even”); | 获取到的li元素中,选择索引号为偶数的元素 |
parent() | $(".first").parent(); | 查找父亲 |
children(selector) | $(“ul”).children(“li”) | 相当于$(“ul>li”),子类选择器 |
find(selector) | $(“ul”).find(“li”); | 相当于$(“ul li”),后代选择器 |
siblings(selector) | $(".first").siblings(“li”); | 查找兄弟节点,不包括自己本身。 |
next() | $(".first").next(); | 查找当前元素之后的下一个兄弟 |
nextAll() | $(".first").nextAll(); | 查找当前元素之后的所有同辈元素 |
prev() | $(".last").prev(); | 查找当前元素之前的上一个兄弟 |
prevAll() | $(“last”).prevAll(); | 查找当前元素之前的所有同辈元素 |
hasClass(class) | $(“div”).hasClass(“show”) | 检查当前的元素是否含有某个特定的类,如果有,则返回 true |
eq(index) | $(“li”).eq(2); | 相当于$(“li:eq(2)”),index 从0开始 |
jQuery 不需要显式使用 forEach 语法,若选择器匹配多个元素,jQuery 会自动为每个元素执行相同的操作。
javascript
$("div").css("background", "pink");
$("ul li").css("color", "red");
使用 - 修改样式
jQuery 可以使用 css 方法来修改简单元素样式;也可以操作类,修改多个样式。
- 参数只写属性名,则是返回属性值
javascript
$(this).css("color");
- 参数是属性名,属性值,中间由逗号分隔,是一组样式,属性必须加引号,值如果是数字可以不用跟单位和引号
javascript
$(this).css("color","red");
- 参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开,属性可以不用加引号
javascript
$(this).css({"color":"red","font-size":"20px"});
jQuery 也可以设定元素的类名,作用等同于以前的 classList,可以操作类样式。
- 添加类
javascript
$("div").addClass("current");
- 移除类
javascript
$("div").removeClass("current");
- 切换类
javascript
$("div").toggleClass("current");
使用 - 显示与隐藏元素
显示使用 show 方法,语法为:
javascript
show([speed, [easing], [fn]])
- 参数都可以省略,省略后没有动画,直接显示。
speed
:三种预定速度之一的字符串 (“slow”,“normal”,“fast”) 或表示动画时长的毫秒数值 (如:1000)。easing
:用来指定切换效果,默认是 "swing",可用参数 "linear"。fn
:在动画完成时执行的函数,每个元素执行一次。
隐藏使用 hide 方法,语法为:
javascript
hide([speed, [easing], [fn]])
- 参数都可以省略,省略后没有动画,直接隐藏。
speed
:三种预定速度之一的字符串 (“slow”,“normal”,“fast”) 或表示动画时长的毫秒数值 (如:1000)。easing
:用来指定切换效果,默认是 "swing",可用参数 "linear"。fn
:在动画完成时执行的函数,每个元素执行一次。
上述方法都是直接作用于元素的 display 属性,会直接让元素消失或隐藏,还可以让元素伴随动画地消失,这里介绍两个最常用的,淡入和淡出。
淡入效果,语法:
javascript
fadeIn([speed], [easing], [fn])
淡出效果,语法:
javascript
fadeOut([speed],[easing],[fn])
除此之外,还可以自定义动画:
javascript
animate(params, [speed], [easing], [fn])
这个函数的关键在于指定动画形式及结果样式属性对象。这个对象中每个属性都表示一个可以变化的样式属性(如 “height”、“top” 或 “opacity” )。注意:所有指定的属性必须用骆驼形式,比如用marginLeft代替margin-left。而每个属性的值表示这个样式属性到多少时动画结束。如果是一个数值,样式属性就会从当前的值渐变到指定的值。如果使用的是“hide”、“show”或“toggle”这样的字符串值,则会为该属性调用默认的动画形式。
params
:一组包含作为动画属性和终值的样式属性和及其值的集合(用对象实现),必须写。speed
:三种预定速度之一的字符串 (“slow”,“normal”, or “fast”) 或表示动画时长的毫秒数值 (如:1000)。easing
:用来指定切换效果,默认是 "swing",可用参数 "linear"。fn
:在动画完成时执行的函数,每个元素执行一次。
使用 - 属性
获取属性:
javascript
prop("属性")
设置属性:
javascript
prop("属性", "属性值")
上述语法可以设置元素的固有属性,下面的 attr 方法则可以操作自定义属性。
自定义属性就是用户自己给元素添加的属性。比如给li
添加index="1"
。
获取属性:
javascript
attr("属性")
设置属性:
javascript
attr("属性", "属性值")
使用 - 内容文本值
获取元素的 HTML 代码内容:
javascript
html() // 获取元素的内容
html("内容") // 设置元素的内容
获取元素的文字内容:
javascript
text() // 获取元素的内容
text("内容") // 设置元素的内容
获取表单元素的 value:
javascript
val() // 获取元素的内容
val("内容") // 设置元素的内容
使用 - 操作元素
隐式迭代:对同一类元素做相同操作。如果做不同操作,需要使用遍历:
javascript
$("div").each(function (index, domEle) {xxx;})
// 也可以写成
$.each($("div"),function (index, domEle) {xxx;}))
// 主要用于处理数据
- index 是每个元素的索引号,domEle 是每个 DOM 元素对象,不是 jQuery 对象
- 想要使用 jQuery 方法,就要给这个 dom 元素转换为 jQuery 对象 $(domEle)
内部添加:
javascript
$("ul").append(li);//放到最后面,类似原生 appendChild
外部添加:
javascript
el.before(内容); // 把内容放到目标元素前面
el.after(内容); // 把内容放到目标元素后面
删除元素:
javascript
el.remove() // 删除匹配节点(本身)
el.empty() // 删除匹配节点的子节点
el.html("") // 相当于 empty()
使用 - 宽高
语法 | 用法 |
---|---|
width()/height() | 取得匹配元素宽度和高度值,只算width/height |
innerWidth()/innerHeight() | 取得匹配元素宽度和高度值,包括padding |
outerWidth()/outerHeight() | 取得匹配元素宽度和高度值,包括padding和border |
outerWidth(true)/outerHeight(true) | 取得匹配元素宽度和高度值,包括padding、border和margin |
- 以上参数为空,则获取响应值,返回的是数字型
- 如果参数未数字,则是修改相应值
- 参数可以不写单位
使用 - 元素位置
offset()
设置或获取元素偏移
- offset() 方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系。
- 该方法有2个属性 left 和 top。offset().top 用于获取距离文档顶部的距离,offset().left 用于获取距离文档左侧的距离。
- 可以设置元素的偏移:offset({top:10,left:10})。
position()
获取元素偏移
- position() 方法用于返回被选元素相对于带有定位的父级偏移坐标,如果父级没有定位,则以文档为准。
该方法只能获取不能设置偏移
scrollTop()
/scrollLeft()
设置或获取元素被卷去的头部或左侧
- scollTop() 方法设置或返回被选元素卷去的头部。
- scollLeft() 方法设置或返回被选元素卷去的左侧。
使用 - 事件
注册事件:
javascript
element.事件(function);
$("div").click(function(){ 事件处理程序 }) // 其他事件和原生事件基本一致
绑定事件:
javascript
on(events, fn)
- events 可以是一个事件名称,如 click,表示对该事件添加监听;也可以是一个对象。
- fn为触发了事件后执行的回调函数
javascript
// 同一对象不同操作不同回调
$("div").on({
mouseenter:function() {
$(this).css("color", "red");
},
mouseleave:function() {
$(this).css("color", "black");
}
})
// 同一对象不同操作相同回调
$("div").on("mouseenter mouseleave", function(){
$(this).toggleClass("current");
})
动态创建的元素,click() 没有办法绑定事件,on() 可以给动态生成元素绑定事件。
javascript
$("ul").on("click", "li", function(){
alert("clicked li");
});
let li = $("<li>click</li>");
$("ul").append(li);
这里的第二个参数为可选参数,语法那里没有标注,因为不常用。
解绑事件可以用 off 函数。
javascript
off(events,[selector],[fn])
javascript
off(); // 解除所有事件
off("click"); // 只解除点击事件
off("click", "li"); // 解除事件委托
123
回调函数可以传入一个参数,作为事件对象。
javascript
on(events,[selector],function(even) { })
even.preventDefault() // 阻止默认行为 或者用 return false
even.stopPropagation() // 阻止冒泡