jQuery入口函数
等待页面DOM加载完毕后执行代码
1 2 3 4 5 6 7 8
| $(document).ready(function(){ })
$(function(){ })
|
jQuery对象和DOM对象
DOM对象: 原生JS获取的元素对象
jQuery对象: 本质是利用$对DOM对象包装后产生的对象,伪数组形式存储,数组元素为对象本身,数组最后一项属性为长度(元素个数)
jQuery对象和DOM对象相互转换
DOM对象转换为jQuery对象:通过jQuery方法将原生DOM转换为实例对象,并以伪数组形式存储,每个对象会分配一个索引号(从0开始)
jQuery对象转换为DOM对象:jQuery对象在生成时为每个DOM元素设置了索引号,根据该索引号就可以拿到相应的DOM对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <script> $("ul") $("ul li")[0] $("ul li").get(0) $("ul li").click(function(){ $(this).index() }) </script>
|
jQuery常用API
jQuery选择器
jQuery隐式迭代:jQuery选择器选中多个元素后,会自动为所有元素执行相关操作(如添加样式)
jQuery链式编程,需要注意是对哪个对象执行的操作
基础选择器
层级选择器
筛选选择器
jQuery筛选方法
jQuery样式操作
读取样式属性
修改样式
1 2 3 4 5 6 7 8 9 10 11 12 13
| $(this).css('color':'red') $(this).css('width':200)
$("div").css({ width: 200, height: 200, color: "red", backgroundColor: "blue", });
|
样式类操作(添加、删除、切换)
jQuery类操作只针对操作的类,不影响元素已有的类
原生JS操作中.className=’ '是直接将元素class属性重写
1 2 3 4 5
| .class{...} ... $(this).addClass("class") $(this).removeClass("class") $(this).toggleClass("class")
|
jQuery动画效果
常用动画
show([speed,[easing],[fn]])
- speed:速度,可以用slow、normal、fast或自定义毫秒数
- easing:切换效果
- fn:回调函数
1 2
| $(this).fadeTo(1000, 0.5)
|
事件切换 hover()
1 2
| $(this).hover(function(){}, function(){}) $(this).hover(function(){} )
|
停止动画排队 stop()
stop()方法必须写到动画前面, 每次执行该动画时,若上次还未结束,直接结束动画并开始本次动画,防止动画多次执行
1
| $(this).stop().slideToggle()
|
自定义动画 animate()
1 2 3 4
|
$("div").animate({ width: 100, height: 300, left: 100 })
|
jQuery属性操作
固有属性操作 prop()
1 2
| element.prop("属性名") element.prop("属性名","属性值")
|
自定义属性 attr()
1 2
| element.attr("属性名") element.attr("属性名","属性值")
|
数据缓存 data()
将元素看做变量,存储键值对数据
1 2 3 4
| <script> element.data("属性名") element.data("属性名","属性值") </script>
|
1 2 3 4
| <div data-index="2"></div> <script> $("div").data("index") </script>
|
jQuery文本属性值(内容文本值)
普通元素内容 html()
相当于原生innerHTML,获取或改变元素内部所有内容(包括标签)
1 2
| element.html() element.html("XXX")
|
普通文本内容 text()
相当于原生innerText,获取文本内容时会忽略标签
1 2
| element.text() element.text("XXX")
|
表单值 val()
相当于原生value
1 2 3 4 5
| <input type="text" value="请输入内容" /> <script> $("input").val() $("input").val("test") </script>
|
jQuery元素操作
遍历元素 each()、$.each()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
<script> const color = ["red", "green", "blue"]; $(function () { $("div").each((i, domEle) => { $(domEle).css("color", color[i]); }); }); </script>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
<script> const color = ["red", "green", "blue"]; const user = {name:"zhangsan", age:18} $(function () { $.each(color, (i, ele) => { console.log(i, ele); }); $.each(user, (key, val) => { console.log(key, val); }); }); </script>
|
创建
添加
内部添加:添加元素与目标元素为父子关系
1 2 3 4 5 6 7 8 9
| <ul> <li>1</li> </ul>
<script> const li = $("<li>新创建的li元素</li>"); $("ul").append(li) $("ul").prepend(li) </script>
|
外部添加:添加元素与目标元素为兄弟关系
1 2 3 4 5 6 7 8 9
| <ul> <li>1</li> </ul>
<script> const li = $("<li>新创建的li元素</li>"); $("ul").after(li) $("ul").before(li) </script>
|
删除
1 2 3
| element.remove() element.empty() element.html("")
|
jQuery尺寸、位置操作
尺寸
- 参数为空,获取相应值,返回的是数字型
- 参数为数字,修改相应值,参数可以不写单位
位置
scrollTop结合animate动画可以设置滚动到顶部的动画
1 2 3 4 5
| $(".back").click(function () { $("body,html").stop().animate({ scrollTop: 0, }); });
|
jQuery事件处理
普通单事件绑定
on() 绑定事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| $("div").on(events,[selector],fn)
$("div").on("click",function(){...})
$("div").on({ click:function(){...}, keydown:function(){...} })
$("div").on("mouseenter mouseleave", function(){...})
$("ul").on("click","li",function(){...})
$("ol").on("click","li",function(){alert(11)}) const li = $("<li>后来创建的</li>"); $("ol").append(li);
|
off() 解绑事件
1 2 3
| $("div").off() $("div").off("click") $("ul").off("click","li")
|
one() 触发一次事件
1
| $("div").one("click", function(){...})
|
自动触发事件
1 2 3 4 5 6 7 8
| $("div").on("click", function(){alert(1)})
$("div").click()
$("div").triggrt("click")
$("div").triggerHandler("click")
|
jQuery对象拷贝
1 2 3 4
| $.extend([deep], target, object, [objectN])
|
拷贝过程中发现同名对象,会覆盖掉原来的对象值
浅拷贝指的是把拷贝对象的复杂数据类型的地址拷贝给目标对象,两者指向同一块地址
浅拷贝中发现同名复杂数据类型,会用拷贝对象地址覆盖掉原来的地址
深拷贝对于复杂数据类型直接clone并新开辟空间存放
jQuery多库共存
$符号或jQuery关键字与其他库相冲突的解决方案
方法一:如果$
符号冲突,使用jQuery
方法二:$.noConflict()
1 2
| var selfConfig = $.noConflict(); selfConfig("div").show();
|