介绍
上一篇bootstrap布局基础中,在引入bootstrap源文件前,先引入了一个jquery.js的JavaScript库,因此这一篇就展开说一下jQuery。
jQuery是一个使用js代码编写,封装好特定函数(方法),可以极大简化js编程,使用极为广泛的js第三方库。
jQuery封装了JavaScript常用的功能代码,简化了DOM操作、事件处理、动画设计和Ajax交互。
许多前端框架都会用到jquery,因此jquery要在这些框架前先引入,这些框架才能正常工作,并且不同的框架可能对jquery的版本有一定要求,使用时需要注意。
PS:在移动端比较常用的js库有zepto。
安装
安装的话直接去官网下载或者CDN在线引用即可,以下为常用CDN。
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"> <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"> <script src="https://lib.sinaapp.com/js/jquery/2.0.2/jquery-2.0.2.min.js"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"> <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-1.9.0.min.js"></script>
使用CDN的优点是在访问此站点时,浏览器可能已经在其它网站缓存了对应CDN的jquery库,这样就可以直接读取缓存。即使没有缓存,CDN也会选取离用户最近的服务器提供服务,因此能提高页面加载速度。
在浏览器的 Console 窗口中执行 $.fn.jquery
命令可以查看当前 jQuery 使用的版本。
基础使用
jQuery 语法是通过选取 HTML 元素,并对选取的元素执行某些操作。
基础语法: $(selector).action()
其中$是jQuery的别称,在代码中可以使用jQuery代替$,但是$更方便使用。
selector是用于选取HTML元素的选择器,action则是对HTML元素进行的操作。
但是当同时引入多个库的时候,$可能也被别的库使用导致多库冲突,为避免这一情况,既可以通过用jQuery代替$,也可以用以下方法自定义别称。
var jq = $.noConflict();
入口函数
jquery入口函数,即在DOM结构渲染完毕后(不必等到所有外部资源加载完成)自动执行的函数。
相当于原生js中的DOMContentLoaded,而原生load事件是等页面文档、外部js、css、图片等媒体文件加载完毕再执行。
用法如下
$(document).ready(function(){ ... }); //或者简写为 $(function () { ... });
DOM对象与jQuery对象
利用原生js获取到的网页元素是DOM对象。
利用jQuery获取到的是jQuery对象(通过$()对对象进行了包装)。
两者的方法不可以混用。
//DOM对象 var myDiv = document.querySelector("div"); //jquery对象 $("div");
DOM与jQuery对象转换
//DOM对象转为jquery对象 $(domElement); //jquery对象转为DOM对象 jqueryElement[index] //或者 jqueryElement.get(index)
jquery选择器
$(“CSS选择器”)
ID $(“#id”)
全选 $(“*”)
类 $(“.class”)
标签 $(“div”)
并集 $(“div,p,li”)
交集 $(“li.current”)
子代 $(“ul>li”)
后代 $(“ul li”)
筛选
第一个 $(“.class:first”)
最后一个 $(“.class:last”)
第几个 $(“.class:eq(0)”)
奇数 $(“.class:odd”)
偶数 $(“.class:even”)
筛选方法
父级 $(“.class”).parent()
祖先 $(“.class”).parents()
子级 $(“.class”).children(“li”)
后代 $(“.class”).find(“li”)
兄弟 $(“.class”).siblings(“li”)
兄 $(“.class”).prevAll()
弟 $(“.class”).nextAll()
含有某个特定类 $(“.class”).hasClass(“protected”)
第几个 $(“.class”).eq(2)
状态选择器
如下,可以选择某些状态下的一类元素进行操作
if($(.checkbox:checked).length === 10){ console.log("all selected!"); }
CSS样式操作
通过css函数读取和设置css样式
//读取css样式 $("div").css("属性") //修改css样式 $("div").css("属性","值") //修改多个css样式 $("div").css({属性1:"值1",属性2:"值2"})
对于jquery的函数是可以自动遍历选择器选中的所有元素执行修改和读取操作(隐式迭代
),避免了再手动写循环操作极为方便,如果对于遍历有需求,后面也有遍历的的方法。
jquery排他
在实际使用中经常需要对一部分选中元素进行一个操作,同时对其他选中操作进行其他操作,这时就可以方便的使用排他方法,其实就是巧妙利用兄弟元素。
//只有刚点击的按钮才会变色的函数 $("button").click(function() { $(this).css("background","red"); $(this).siblings("button").css("background",""); });
上面函数内部的代码可以简写成一行,因为jquery支持链式执行。
$(this).css("background","red").siblings("button").css("background","");
设置类样式
添加类
$("div").addClass("active")
删除类
$("div").removeClass("active")
切换类
$("div").toggleClass("active")
jquery动画效果
jquery封装的动画效果极为强大,不仅有常用的显示隐藏、滑动、淡入淡出,并且能对动画程度、速度自由控制,还支持自定义动画。
控制显示隐藏的动画函数是 show()、hide()、toggle()
,是通过元素放大缩小效果完成显示和隐藏。
以显示为例,show(speed,easing,fn),其中speed控制动画播放速度(可选参数为slow,normal,fast,或者单位为毫秒的数字) ,easing控制动画速度是否线性(可选参数linear,swing,默认为swing非线性) ,fn则是动画播放完毕后的回调函数。
控制滑动的函数为 slideDown()、slideUp()、slideToggle()
,通过元素下滑上滑效果完成元素显示和隐藏,内部参数同样是speed、easing、fn。
控制淡入淡出的函数为 fadeIn()、fadeOut()、fadeToggle()、fadeTo()
,通过改变元素透明度的方式完成元素显示和隐藏,前三者内部参数同上。
fadeTo(speed,opacity,easing,fn) 多了一个opacity参数,改变到指定的透明度,例如网页中常见的鼠标指示某个元素,其他元素自动变暗(透明)的效果,就可以使用此动画制作。
自定义 animate()
自定义动画可以对网页元素的任意属性做动画,例如下面的移动动画
animate({left:500,top:200},speed,easing,fn)
只有元素能做动画,不能文档(document),因此如果做页面滚动动画,则为
$("body,html").animate({ scrollTop: 0 })
动画排队
所有jquery动画都会有排队问题,即同一动画短时间内多次触发会顺序执行,导致触发已经结束,而动画仍在不断播放。
停止动画排队的函数为stop()
,只要在所有动画前加上此函数即可避免动画排队现象。
$(this).stop().fadeTo(500,0.5)
属性操作
对于固有属性例如href、title等,可以使用prop()
获取和更改。
//读取属性 element.prop("属性名") //修改属性 element.prop("属性名","属性值")
也可以通过attr()
,获取h5自定义属性data-*
//读取h5自定义属性,类似原生js的getAttribute element.attr("属性名") //修改h5自定义属性,类似原生js的setAttribute element.attr("属性名","属性值")
数据缓存,可以通过data()
将数据存放到元素的内存中,DOM中看不到,页面刷新后丢失。并且可以获取h5的自定义数据,不用写data-
前缀。
element.data("变量","值")
元素内容操作
普通元素内容通过html()
进行操作,相当于原生js的innerHTML
//读取 html() //修改 html(内容)
普通元素文本内容通过text()
进行操作,相当于原生innerText
//读取 text() //修改 text(内容)
表单值通过val()
进行操作,相当于原生value
//读取 val() //修改 val(值)
遍历
如果不用隐式遍历,可用elements.each(function(index,domEle) {...})
或者 $.each($("div"),function(index,domEle) {...})
后者也可以用来遍历数组和字典,替代for,注意domEle必须为DOM元素,不能使用jquery元素。
//给3个元素设置不同颜色 var arr = ["red","blue","green"] elements.each(function(index,domEle) { $(domEle).css("color",arr[index]); })
元素操作
创建元素
var li = $("<li>create</li>");
添加元素
分为内部添加和外部添加两种方式,内部添加为父子关系,外部添加为兄弟关系。
内部添加 类似原生appendChild
//放到最后 element.append(li) //放到最前 element.prepend(li)
外部添加
//放到后面 element.after(li) //放到前面 element.before(li)
删除元素
//清除自身 element.remove() //清除自身所有子元素 element.empty() //清除元素内容 element.html("")
事件操作
为html元素绑定事件是日常开发中常用的操作,jquery也进行了简洁的封装,相比于原生js,jquery的事件绑定优势是可以对动态创建的元素绑定事件。
普通绑定
element.事件(function(){})
多重绑定
可以给元素同时绑定多个触发事件
element.on({ click:function(){}, mouseenter:function(){}, mouseleave:function(){} }) element.on("mouseenter mouseleave",function() { $(this).toggleClass("current") }) hover(over,out); //over方法:鼠标移到(相当于mouseenter) //out方法:鼠标移走(相当于mouseleave) //如果hover(toggle) 则鼠标移到、移走都会触发
事件委派
事件绑定在父元素上,但触发对象是子元素
parentEle.on("click",childEle,function(){})
优点是可以做到动态绑定,即动态生成的子元素如果想要绑定事件,那么可以使用事件委派绑定在父元素上。
单次触发事件
即只触发一次就失效的事件
element.one()
解绑事件
//解绑所有事件 element.off() //解绑点击事件 element.off("click") //解绑委托事件 element.off("click",childEle)
自动触发事件
element.on("click",function() {...})
如上有一个点击事件,下面是几种触发方法
//自带触发 element.click() //简单触发 element.trigger("click") //不触发元素的默认行为,例如文本元素获得焦点后的光标闪烁 element.triggerHandler("click")
事件对象
事件对象即在触发对象时对触发过程作出修改,具体行为可以将event打印出来查看。
element.on("click",function(event) { ... //阻止冒泡,例如父子元素都有点击事件,则子触发后父不再触发 event.stopPropagation(); //阻止默认行为,例如文本元素获得焦点后的光标闪烁 event.preventDefault(); ... })
对象拷贝
可以使用extend()函数将对象进行拷贝
$.extend(deep,target,object)
deep参数为true时深拷贝,默认false浅拷贝
target为拷贝结果
object为拷贝源
尺寸、位置操作
尺寸操作
//元素尺寸 width()/height() //包含padding的尺寸 innerWidth()/innerHeight() //包含border的尺寸 outerWidth()/outerHeight() //包含margin的尺寸 outerWidth(true)/outerHeight(true)
函数内为空时读取尺寸,提供数字参数则是修改尺寸,可以不写单位px。
位置
//距离文档的位置,绝对位置 offset() //距离父元素的位置,相对位置 position() //当父元素尺寸小于子元素尺寸,出现滚动条时,显示被遮挡的尺寸。 //例如控制返回顶部按钮显示 scrollTop()/scrollLeft()
AJAX操作
AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML)。
简短地说,在不重载整个网页的情况下,AJAX 通过后台加载数据,并在网页上进行显示,实现对部分网页的更新。
jQuery load()
load() 方法从服务器加载数据,并把返回的数据放入被选元素中。
$(selector).load(URL,data,callback);
URL 参数为希望加载的 URL,data 参数规定与请求一同发送的查询字符串键值对,callback 参数是 load() 方法完成后所执行的函数名称。
回调函数可以设置不同的参数:
- responseTxt – 包含调用成功时的结果内容
- statusTXT – 包含调用的状态
- xhr – 包含 XMLHttpRequest 对象
get() 和 post()
用于通过 HTTP GET 或 POST 请求从服务器请求数据。
- GET – 从指定的资源请求数据
- POST – 向指定的资源提交要处理的数据
$.get(URL,callback); $.post(URL,data,callback);
回调函数中第一个参数存有被请求页面的内容,第二个参数存有请求的状态。
获取后台返回值
需要注意同步调用,且在ajax对全局变量设值,ajax函数外将变量return。
function getReturn(name,value) { var result = null; $.ajax({ url:"/api", type:"post", data: JSON.stringify({name:value}), dataType:"application/json", async:false, success:function(data){ result = data; } }) return result; }
jquery插件
jquery有许多功能强大的插件,例如实现图片懒加载、cookie操作、全屏滚动等特效插件等,可自行搜索下载使用。
后记
最近在开发网页过程中,使用原生js在一个复杂页面中绑定各种触发事件和与后台进行ajax交互,写得相当复杂。
意识到不能闭门造车的我,去搜索jquery教程进行了学习,顿时感觉豁然开朗,不愧是write less,do more。
在学习过程中从B站黑马程序员pink老师的jquery视频教程处获益良多,讲解清晰,案例生动,致谢。
人生没有标准答案,
但要有个你的答案。
——陈铭
评论
782741 535802What web host are you the usage of? Can I get affiliate link to your host? I desire site loaded up as quickly as yours lol 127454
274317 777232you might have a wonderful weblog here! would you wish to make some invite posts on my weblog? 36050
53760 814071Wow you hit it on the dot we shall submit to Plurk in addition to Squidoo nicely done انواع محركات الطائرات | هندسة نت was excellent 331367