一、jQuery的相关概念
1、jQuery: 包括了很多好用的方法的js文件,对原生js的操作进行包装
使用webAPI中的原生js实现的 都可以使用jQuery实现
2、jQuery的基本使用流程:
1 引入jQuery的js文件:jQuery官网 github
2 写入口函数:页面加载事件,为了能在页面标签加载完成之后再执行代码 $(function(){ .... })
3 在入口函数中书写正式代码
3、jQuery对象和DOM对象
jQuery对象:使用jQuery的方法获取的元素
实质:jQuery对象是一个包含了DOM对象伪数组
注意:只能调用jQuery对象的属性和方法 不能使用DOM对象的属性和方法
jQuery对象转化为DOM对象:jQuery对象[索引值] jQuery对象.get(索引值)
DOM对象:使用原生js的方法获取的元素
实质:一个标签对应的对象
注意:只能调用DOM对象的属性和方法 不能使用jQuery对象的属性和方法
转化为jQuery对象:$(DOM对象)
二、选择器
基本选择器
- id选择器:$(’#id’);
- 全选:$(’*’);
- 类选择器:$(’.class’);
- 标签选择器:$(‘div’);
- 并集选择器:$(‘div,p’);
- 交集选择器:$(‘li .current’);
- 子代选择器:$(‘ul>li’);
- 后代选择器:$(‘ul li’)
筛选选择器
- 选择第一个:$(‘li:first’);
- 选择最后一个:$(‘li:last’);
- 选择索引:$(‘li:eq()’);
- 奇数:$(‘li:odd’);
- 偶数:$(‘li:even’);
父级和子代选择器 - parents() 祖父
- parent():父亲
- jQuery对象.parent(): 选择jQuery对象的父元素
- hildren(): 子代
- jQuery对象.children(): 选择jQuery对象的子元素
- 注意:如果不传入参数则选择出所有子元素
$("div").children() 选择div的所有子元素
$("div").children("p") 选择div的所有子元素中p标签
- find(): 后代
jQuery对象.find(): 选择jQuery对象的后代元素
注意:必须要有参数,如果没有参数 选择不到元素 - siblings():获取所有兄弟元素(不包括自己哦)
jQuery对象.siblings(): 选择jQuery对象的兄弟元素
注意:没有选择到当前元素 - nextAll():获取后面的兄弟元素 jQuery对象.nextAll(): 选择jQuery对象的后面的兄弟元素
- prevAll(): 获取前面的兄弟元素
jQuery对象.prevAll(): 选择jQuery对象的前面的兄弟元素 - eq():
jQuery对象.eq(索引值): 选择jQuery对象中索引值为指定值的元素在这里插入
三、jQuery操作元素的方法
show() 显示
hide() 隐藏
hasClass():
jQuery对象.hasClass(类名字符串): 判断jQuery对象是否具有某个类
返回true:具有指定类
返回false:不具有指定类
css()
设置样式
jQuery对象.css(样式名,样式值)
jQuery对象.css({
样式名1:样式值1,
样式名2:样式值2,
样式名3:样式值3
})
获取样式
jQuery对象.css(样式名)
##### toggleClass()
切换类名,如果有就删除,如果没有就添加
css()样式
设置样式
jQuery对象.css(样式名,样式值)
注意:这里需要给样式名和样式值加引号
jQuery对象.css({
样式名1:样式值1,
样式名2:样式值2,
样式名3:样式值3
})
注意:这里不需要给样式名加引号。但是如果样式值不是一个数 字,则样式值需要加引号。
获取样式
jQuery对象.css(样式名),这里需要加引号
show/hide/toggle拓展
对角线动画 show(1000,fn)
第一个参数 动画时间
第二个参数 动画完成后的回调函数
注意:如果不指定动画时长,则无动画效果
slideDown/slideUp/slideToggle
滑入滑出动画 slideDown(1000,fn)
第一个参数 动画时间
第二个参数 动画完成后的回调函数
注意:即使不传入动画时间参数,也有动画效果
fadeIn/fadeOut/fadeToggle
淡入淡出动画 fadeIn(1000,fn)
第一个参数 动画时间
第二个参数 动画完成后的回调函数
注意:即使不传入动画时间参数,也有动画效果
fadeTo
fadeTo(1000,value,fn)
动画时长/透明度/回调函数
stop( )
动画排队解决方法:
某个元素上如果同时设置了多个动画,则这些动画会按照添加的顺序依次执行
可以简单理解为把所有动画都清除了
添加新的动画之前,可以用stop清除原来的动画
animate({})
自定义动画
jQuery对象.animate( 样式属性的键值对,动画时间,回调函数 )
以动画的形式来设置元素的样式
val()
操作表单元素的值
对应表单元素的value属性
设置值 $(selector).val(“具体值”);
获取值 $(selector).val();
html()
对应innerHTML
设置 jQuery对象.html(要设置的HTML内容)
获取 jQuery对象.html()
text()
对应innerText
设置 jQuery对象.text(要设置的文本内容)
获取 jQuery对象.text()
attr()操作自定义属性
操作标签自定义属性
获取 $(selector).attr(“title”);
设置 $(selector).attr(“title”, “传智播客”);
prop()操作固有属性
操作元素固有属性
data()
在元素上存储、取数据
可以理解为把数据存储到元素上,将来可以通过这个元素来获取之前存储的数据
存储 jQuery对象.data( 数据名, 数据 )
取 jQuery对象.data( 数据名 )
each()遍历
each(function(index,element){})
jQuery对象.each(function(遍历的索引值,遍历到的元素){
遍历到的索引值是一个从0开始的数字
遍历到的元素是一个DOM对象
})
$.each(要遍历的对象,function(遍历的索引值,遍历到的数据){
})
focus()获取焦点
ele.focus()
使前面的元素获取焦点
创建、插入、删除元素
创建
$(具有标签格式的字符串)
注意:以上方式创建的返回值是 jQuery对象
插入
父元素.append(目标元素) 把目标元素插入到父元素的最后一个子节点的位置上
父元素.prepend(目标元素) 把目标元素插入到父元素的第一个子节点的位置上
兄弟元素.after(目标元素) 把目标元素插入到后面兄弟元素的位置上
兄弟元素.before(目标元素) 把目标元素插入到前面兄弟元素的位置上
删除
jQuery对象.remove()
清空
jQuery对象.empty() 清空当前标签中的所有内容
jQuery对象.html("") 清空当前标签中的所有内容
JSON方法
JSON.stringify(data)将括号中的对象转换为字符串
JSON.parse(data)将括号中的字符串转换为对象
关于JQ自动索引
JQ只能给相同的并且是亲兄弟的标签默认添加伪索引,
如果这些标签不是亲兄弟,那么只能通过自定义的方式来添加真索引
操作元素的尺寸、位置
尺寸
width()/height()
jQuery对象.width() 获取到盒子的width属性值,获取到的是一个数值
innerWidth()/innerHeight()
jQuery对象.innerWidth() 获取到的是盒子的width + padding ,获取到的是一个数值
outWidth()/outHeight()
jQuery对象.outWidth() 获取到的是盒子的width + padding + border ,获取到的是一个数值
jQuery对象.outWidth(true) 获取到的是盒子的width + padding + border + margin ,获取到的是一个数值
位置
offset()
操作元素在文档中的位置
参考位置:整个文档
使用方式:
获取:jQuery对象.offset()
设置:jQuery对象.offset({left:目标值,top:目标值 })
position()
操作元素在上层标签中的位置
参考位置:距离当前盒子最近的有定位的上层标签,如果没有就是文档
使用方式:
获取:jQuery对象.position()
设置:jQuery对象.position({left:目标值,top:目标值 })
内容超出元素的距离(页面滚动)
内容超出元素的距离:scrollTop、scrollLeft
jQuery对象.scrollTop()、jQuery对象.scrollLeft()
获取元素的内容超出元素上方、左侧的距离
jQuery对象.scrollTop(位置)、jQuery对象.scrollLeft(位置)
设置元素的内容超出元素上方、左侧的距离
特殊:
获取页面滚动出去上方的高度 $(document).scrollTop()
设置页面滚动出去上方的高度 $('body,html').scrollTop(目标值)
四、jQuery方法的特性
隐式迭代:在jQuery中,可以同时操作多个标签,方法内部会隐式循环迭代
如:$("li").css("color","red")
链式编程:在jQuery中,"设置方法"会返回调用该方法的对象
1、使用jQuery遍历对象
jQuery对象.each(function(遍历的索引值,遍历到的元素){
遍历到的索引值是一个从0开始的数字
遍历到的元素是一个DOM对象
})
$.each(要遍历的对象,function(遍历的索引值,遍历到的数据){
})
2、使用jQuery创建、插入、删除元素
创建
$(具有标签格式的字符串)
插入
父元素.append(目标元素) 把目标元素插入到父元素的最后一个子节点的位置上
父元素.prepend(目标元素) 把目标元素插入到父元素的第一个子节点的位置上
兄弟元素.after(目标元素)
兄弟元素.before(目标元素)
删除
jQuery对象.remove()
清空
jQuery对象.empty() 清空当前标签中的所有内容
jQuery对象.html("") 清空当前标签中的所有内容
3、jQuery操作元素的尺寸、位置
尺寸
width()/height()
jQuery对象.width() 获取到盒子的width属性值,获取到的是一个数值
innerWidth()/innerHeight()
jQuery对象.innerWidth() 获取到的是盒子的width + padding ,获取到的是一个数值
outWidth()/outHeight()
jQuery对象.outWidth() 获取到的是盒子的width + padding + border ,获取到的是一个数值
jQuery对象.outWidth(true) 获取到的是盒子的width + padding + border + margin ,获取到的是一个数值
位置
offset()
参考位置:整个文档
position()
参考位置:距离当前盒子最近的有定位的上层标签,如果没有就是文档
内容超出元素的距离:scrollTop、scrollLeft
jQuery对象.scrollTop()、jQuery对象.scrollLeft()
获取元素的内容超出元素上方、左侧的距离
jQuery对象.scrollTop(位置)、jQuery对象.scrollLeft(位置)
设置元素的内容超出元素上方、左侧的距离
4、jQuery事件
绑定事件:on
1)同时绑定多个事件
jQuery对象.on({
事件名1:事件处理函数1,
事件名2:事件处理函数2,
事件名3:事件处理函数3
})
jQuery对象.on( 事件名字符串 , 事件处理程序 )
2)事件委托-事件委派
上层元素.on( 事件名 , 下层元素选择器 , 事件处理程序)
注意:事件是绑定到了上层元素上,由下层元素触发
优势:
1、减少了绑定事件的次数
2、可以为动态创建的元素(未来元素)预定事件
3、在事件处理程序中,this指向下层元素
hover事件
鼠标经过离开都会触发
1、jQuery对象.hover( 事件处理程序1,事件处理程序2 )
鼠标经过触发处理程序1
鼠标离开触发处理程序2
2、jQuery对象.hover( 事件处理程序 )
鼠标经过、离开都会 触发处理程序
input事件
当表单中的数值改变时,会触发该事件:
注意:不需要失去焦点,只需要改变值就会触发。
change() 事件
当元素的值发生改变时,会发生 change 事件。
该事件仅适用于文本域(text field),以及 textarea 和 select 元素。
注释:当用于 select 元素时,change 事件会在选择某个选项时发生。当用于 text field 或 text area 时,该事件会在元素失去焦点时发生。
绑定事件:on
1)同时绑定多个事件
设置不同的事件处理函数:
jQuery对象.on({
事件名1:事件处理函数1,
事件名2:事件处理函数2,
事件名3:事件处理函数3
})
设置相同的事件处理函数:
jQuery对象.on( 事件名字符串 , 事件处理程序 )
例:jQuery对象.on("click mouseleave",function(){alert(1)})
2)事件委托-事件委派
上层元素.on( 事件名 , 下层元素选择器 , 事件处理程序)
注意:事件是绑定到了上层元素上,由下层元素触发
优势:
1、减少了绑定事件的次数
2、可以为动态创建的元素(未来元素)预定事件
3、在事件处理程序中,this指向下层元素
解绑事件off
jQuery对象.off()
解绑所有事件
jQuery对象.off(事件类型名)
解绑指定类型事件
jQuery对象.off(事件类型名,选择器)
解绑委托事件(本身的事件还在)
特殊:解绑所有委托事件
$("ul").off("click", "**");解绑ul上面所有的点击委托事件
触发事件trigger
jQuery对象.事件名()
jQuery对象.trigger(事件类型)
(最常用,记住)jQuery对象.triggerHandler(事件类型) 不能触发浏览器的默认行为,只能让事件处理程序执行
jQuery方法的特性
隐式迭代:在jQuery中,可以同时操作多个标签,方法内部会隐式循环迭代
如:$("li").css("color","red") 会将所有选中的的li都改变颜色为red
链式编程:在jQuery中,"设置方法"会返回调用该方法的对象,所以在"设置方法"的后面可以继续书写“设置方法”,或者书写“其他选择器”和对应的“设置方法”。
解决多库共存问题(命名冲突)
1、如果$被占用,可以使用jQuery
2、如果$和jQuery都被占用,可以在引入冲突的库之前,用$.noConflict()转移控制权
对象的 拷贝
方法一:
$.extend([deep],target,object1,[objectN])
depp如果为true为深拷贝,默认为false浅拷贝
深拷贝会直接拷贝数据,如果数据中的简单数据出现重名会覆盖。
浅拷贝只能拷贝简单类型的数据,复杂数据只能拷贝一个地址过去。
target 要拷贝的目标对象
object1 待拷贝的第一个对象
objectN 待拷贝的第N个对象
方法二:
递归
方法三:
JSON对象的parse和stringify
例如:
function deepClone(obj){
//将待拷贝对象转为字符型存起来
let _obj = JSON.stringify(obj),
//将字符型数据转换为对象型,传递给要拷贝的目标对象
objClone = JSON.parse(_obj);
return objClone
}
let a=[0,1,[2,3],4],
b=deepClone(a);
a[0]=1;
a[2][0]=1;
console.log(a,b);