概述 :
jQuery是一个轻量级的js库 , 它将js的功能进行了封装 ( 所有的内容都是函数 ) , 它在封装的基础上做了进一步的兼容 ( 兼容性好 )
特点 : (优势)
-
可链式调用 ( 里面所有的方法返回的都是jQuery对象 )
-
有丰富的选择器和筛选器
-
有良好的动画兼容 ( 动画库非常强大 , 借助了animated.js ( 主要用到css3的动画 ) )
简单入门
核心对象 jQuery( 是个函数 ) 可简写为$
-
dom对象转为jQuery对象 , 需要把dom对象传入jQuery函数中
-
jQuery对象转为dom对象 , 可使用下标获取对应的dom对象
// jQuery的核心对象都是函数 console.log(jQuery) console.log($) //相当于是document.querySelectorAll console.log(jQuery('div'))//是jQuery对象 // 将jQuery对象转成dom对象使用下标获取就可以了 console.log(jQuery('div')[0]) //dom对象 // 将dom对象转成jQuery对象只要直接把对象传入jQuery函数中就可以 let dom = document.querySelectorAll('div')[1] console.log($(dom))
jQuery的选择器
-
所有的css选择器都可以使用 ,
-
新增相关选择器 ( odd , even , first , last ,eq... )
//css选择器 console.log($('ul>li:nth-child(1)')) //新增的选择器 console.log($('li:eq(1)')) //传入的是下标 console.log($('li:odd')) //根据下标,获取下标为奇数的 console.log($('li:even')) //根据下标,获取下标为偶数的 console.log($('li:first')) //获取第一个元素 console.log($('li:last')) //获取最后一个元素
隔行变色功能实现
//获取li的奇数和偶数 let odd = $('li:odd') let even = $('li:even') //遍历奇数和偶数并给他们添加样式 for (let i = 0; i < odd.length; i++) { odd[i].style.backgroundColor = 'red' } for (let i = 0; i < even.length; i++) { even[i].style.backgroundColor = 'hotpink' }
jQuery的筛选器
-
它是用于筛选获取的元素的
-
它可以根据条件 ( 根据选择器 ) 及关系筛选 ( 节点关系 )
相关筛选器
-
eq 筛选对应下标的元素
-
last 筛选最后一个
-
first 筛选第一个
-
param 父元素
-
children 子元素
-
siblings 兄弟元素
-
prev 前面的元素
-
next 后面的元素
-
prevAll 前面所有的元素
-
nextAll 后面所有的元素
-
find 查找子元素内容
<script src="./jquery.min.js"></script> <script> // 获取元素进行筛选 // 获取第三个li console.log($('ul>li').eq(2)) // 获取第一个 console.log($('ul li').first()) // 获取最后一个 console.log($('ul li').last()) // 父子关系 console.log($('ul li').parent())//获取元素的父元素 console.log($('ul li').parent('div'))//获取符合条件的父元素,不符合就没有 // 兄弟关系 console.log($('ul li').children())//获取子元素 console.log($('ul li').eq(2).children().eq(1).siblings())//获取第2个子元素的兄弟们 console.log($('ul li').eq(2).children().eq(1).next())//获取第2个子元素的下一个 console.log($('ul li').eq(2).children().eq(1).nextAll())//获取第2个元素后面所有的 console.log($('ul li').eq(2).children().eq(1).prev())//获取第2个元素前面的 console.log($('ul li').eq(2).children().eq(1).prevAll())//获取第2个元素前面所有的 // 查找 console.log($('ul li').eq(2).find('.box'))//查找第2个元素内带有class为box的 </script>
jQuery的属性操作
-
prop 只能操作原生属性 ( 原生属性, 本身自带属性 )
-
attr 可以操作任意属性
//传入属性名和属性值,如果传入的参数是一个就是获取,2个就是设置 //prop $('div').prop('class','box')//设置 console.log($('div').prop('class'))//获取 //prop只能操作原生属性 console.log('div').eq(1).prop('id') //如果不是原生属性,获取到的值是undefined console.log('div').eq(1).prop('name') //attr 底层的实现是setAttribute,getAttribute,removeAttribute //原生的和定义的属性都可以设置和获取 $('div').attr('message','ok') console.log($('div').attr('message')) console.log($('div').attr('id')) console.log($('div').attr('name'))
-
removeProp 删除prop设置的属性(原生的属性)
-
removeAttr 删除属性(也就是removeAttribute)
class属性的 相关操作
-
addClass 添加一个class属性
-
removeClass 移除一个class属性
-
toggleClass 切换 ( 有就删除 , 没有就添加 )
//class属性操作 //增删查改 //添加class $('p').addClass('box')//给p添加一个class属性 $('p').addClass('red') //查 通过prop获取 console.log($('p').prop('class')) //删除class $('p').removeClass('box') //修改=>就是先删后加 $('p').removeClass('red') $('p').addClass('green') //切换 有就删除,没有就加上 $('p').toggleClass('green') $('p').toggleClass('green')
样式操作
css方法
//传递1个参数是获取,2个参数是设置 //获取样式 console.log($('div').css('backgroundColor')) console.log($('div').css('width')) //设置样式 console.log($('div').css('padding','10px'))
DOM操作
增删查改
-
append 从后面追加到里面
-
prepend 从前面追加到里面
-
before 插入到当前元素之前
-
after 插入到当前元素之后
-
empty 清空子元素
-
remove 删除本身
-
replaceWith 替换
-
clone 克隆 ( 深拷贝 , 和之前的元素没有关系 )
//dom元素创建 let p = $('<p>我是创建的标签</p>') console.log(p) //从后面追加到div里面 $('div').append(p) //从前面追加到div里面 $('div').prepend(p) //插入到元素后面 $('div').after(p) //插入到元素前面 $('div').before(p) // 改 $('div').replaceWith(p) //删除 $('div').empty() $('div').remove() //克隆 是深拷贝 let p = $('p').clone()
宽高获取
-
width 获取本身的宽度
-
height 获取本身的高度
-
innerWidth 获取本身的宽度+填充
-
innerHeight 获取本身的高度+填充
-
outerWidth 获取本身的宽度+填充+边框
-
outerHeight 获取本身的高度+填充+边框
//获取自身的宽度 console.log($('div').width()) //获取自身的高度 console.log($('div').height()) //获取自身的高度+填充 console.log($('div').innerHeight()) //获取自身的宽度+填充 console.log($('div').innerWidth()) //获取自身的宽度+填充+边框 console.log($('div').outerWidth()) //获取自身的高度+填充+边框 console.log($('div').outerHeight())
位置获取
-
offset 获取当前元素在页面上的位置
-
position 获取当前的盒子在父元素内容的位置 ( 不受margin影响 )
//获取元素到页面的距离(top和left值) console.log($('p').offset())//返回一个jQuery对象 console.log($('p').offset().left) console.log($('p').offset().top) //获取元素到父元素的距离(不包含margin) console.log($('p').position())//返回一个jQuery对象 console.log($('p').position().left) console.log($('p').position().top)
事件
jQuery的事件用到的就是观察者模式 , 它设计了对应的方法
-
on 监听事件
-
off 取消事件
-
one 执行一次
//on 添加事件,传入事件名和处理函数 $('div').on('click',()=>{ console.log('点击了') }) function handler(){ console.log('移动了') } $('div').on('mousemove',handler) //off 取消事件,传入事件名和处理函数(函数要保证是一个) $('div').off('mousemove',handler) //one 只执行一次,传入事件名和处理函数 $('div').one('click',()=>{ console.log('只执行一次') })
jQuery针对所有的常用事件都实现了对应的方法
-
click
-
dblclick
-
mouseenter
-
mouseleave
-
keydown
-
keyup
-
keypress
-
change
-
hover (综合了mouseenter和mouseleave)
-
....
$('div').mouseenter(()=>{ console.log('移入了') }) $('div').mouseleave(()=>{ console.log('移出了') }) $('span').mousemove(()=>{ console.log('移动了') }) $('input').change(()=>{ console.log('内容改变了,失去焦点就触发') }) //hover相当于mouseenter和mouseleave,它有两个处理函数 $('button').hover(()=>{ console.log('移入了') },()=>{ console.log("移出了") })
jQuery实现事件委托
//利用事件委托来操作 $('ul').mouseover((e) => { //事件源兼容写法 e = e || window.event //如果目标元素的标签名是li if (e.target.tagName == 'LI') { //给它自己添加class样式 $(e.target).addClass('selected') //移除兄弟元素的样式 $(e.target).siblings().removeClass('selected') } })
显示内容的获取和设置
有参就是设置,无参就是获取
-
html 相当于innerHTML
-
text 相当于innerText
-
val 相当于value
//设置 $('input').val('我是显示的内容') $('div').text('divdiv') $('span').html('我是span') //获取 console.log($('input').val()) console.log($('div').text()) console.log($('span').html())
jQuery的动画
animate 动画
show 显示, hide 隐藏, toggle切换
slideUp 上去(隐藏),slideDown 下来(显示),slideToggle切换
//传入时间 回调函数 //改变的是宽高,透明度 $('div').show(2000,()=>{ $('div').hide(2000) }) //slideDown,slideUp 变化的是高度 $('div').slideDown(2000,()=>{ $('div').slideUp(2000 }) //show和hide是配对的,toggle显示就调用hide,隐藏就调用show //slideToggle显示就调用slideUp,隐藏就调用slideDown $('div').toggle(2000,()=>{ $('div').slideToggle(2000) })
fadeOut隐藏,fadeIn显示,fadeToggle切换,fadeTo切换到对应的透明的
//只改变透明度,fadeToggle,如果显示就调用fadeOut,隐藏就调用fadeIn $('p').fadeIn(2000,()=>{ $('p').fadeOut(2000,()=>{ $('p').fadeToggle(2000) }) })
jQueryde ajax
概述 :jQuery的ajax是对原生的ajax进行了封装(核心点还是xmlhtmlrequest)并对它进行了拓展,,原生ajax只支持get和post请求,jQuery在原生ajax的基础上增强了其他支持的请求(put,delete,patch,patch...)
resultFul
是一种接口风格,它遵从rest规范,它返回的是json格式数据,根据请求的方式来区分对应的功能(跨平台)
常见的result请求
-
get请求 获取数据
-
post请求 添加数据
-
delete请求 删除数据
-
put请求 修改一条数据
-
patch请求 批量修改数据
对应的方法
-
get方法
-
post方法
-
ajax方法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <button>get方法</button> <button>post方法</button> <button>ajax方法</button> <script src="./jquery.min.js"></script> <script> $('button:eq(0)').click(()=>{ //url地址 参数 回调函数 $.get('https://jsonplaceholder.typicode.com/todos',{ _limit:10 },(res)=>{ console.log(res); }) }) $('button:eq(1)').click(()=>{ //url地址 参数 回调函数 $.post('https://jsonplaceholder.typicode.com/posts',{ username:'jack' },(res)=>{ console.log(res); }) }) $('button:eq(2)').click(()=>{ // $.ajax('https://jsonplaceholder.typicode.com/todos',{ // data:{ // _limit:10 // }, // method:'get', // timeout:3000, // async:true, // dataType:'json', // success(res){ // console.log(res); // }, // error(err){ // console.log(err); // }, // complete(){ // console.log('完成了'); // } // }) $.ajax({ url:'https://jsonplaceholder.typicode.com/todos', data:{ _limit:10 }, method:'get', timeout:3000, async:true, dataType:'json', success(res){ console.log(res); }, error(err){ console.log(err); }, complete(){ console.log('完成了'); } }) }) </script> </body> </html>
ajax的钩子函数(声明周期函数 ,会自动调用)
ajaxComplete 请求完成调用
ajaxError 请求错误调用
ajaxSend 请求发送调用
ajaxStart 请求开始发送
ajaxStop 请求发送停止
ajaxSuccess 请求发送成功
jQuery的多库共存
概述 :当你使用其他的库和jQuery库结合使用,我们有可能在其他的库里有jQuery方法或者有一个变量为$,这个时候就会发生冲突。多库共存就是喂了解决这个问题
noConflict
console.log(jQuery); console.log($); //如果不传参数 默认干掉$ 传入true俩个都干掉 let a = $.noConflict(true) console.log($);//被干掉了 console.log(jQuery); console.log(a);
jQuery的插件扩展
使用extend方法
给jQuery对象进行扩展
//给jQuery对象扩展 静态方法 //第一个名字 扩展的配置 $.extend({ sayHello() { console.log('hello'); } }) //调用 $.sayHello()
给jQuery的方法进行扩展
//给jQuery对象的方法扩展 原型方法 $.fn.extend({ redColor(){ $(this).css('color','red') } }) $('div').redColor() $('p').redColor()标签:jQuery,console,day28,li,获取,div,log From: https://www.cnblogs.com/itlulu/p/16871112.html