最近计划把我去年上半年的Hand-Written-HTML-Site
拿出来讲一讲,展示一下我研究JavaScript
的成果。在写的过程中我用到了jQuery
,这里先转一篇入门的教程过来,后面如果有需要的话可以来这里查阅。
原文链接、参考资料:
1. 使用jQuery
jQuery
是一个快速、简洁的JavaScript
框架,于2006年1月由John Resig发布。jQuery
设计的宗旨是Write Less,Do More
,即倡导写更少的代码,做更多的事情。它封装JavaScript
常用的功能代码,提供一种简便的JavaScript
设计模式,优化HTML
文档操作、事件处理、动画设计和Ajax
交互。
一般为了获取最新的jQuery
,我们使用CDN
,例如:
1 | <script src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js"></script> |
2. jQuery
元素选择器
2.1 元素选择器
jQuery
使用CSS
选择器来选取HTML
元素:
$("p")
选取<p>
元素$("p.intro")
选取所有class=intro
的<p>
元素$("p#demo")
选取所有id="demo"
的<p>
元素
2.2 属性选择器
$("[href]")
选取所有带有href
属性的元素$("[href='#']")
选取所有带有href
值等于#
的元素$("[href!='#']")
选取所有带有href
值不等于#
的元素$("[href$='.jpg']")
选取所有href
值以.jpg
结尾的元素
2.3 更多例子
$("p.intro.demo")
选取所有class=intro
同时class=demo
的<p>
元素$(this)
选取JavaScript
中当前元素$("*")
选取所有元素$("p,i,a")
选取所有<p>
、<i>
和<a>
2.4 层次选择器
$("p a")
选择所有<p>
中的<a>
$("div.demo > div")
选择<div class="demo">
中的<div>
,不包括这些<div>
的子代<div>
$("span.code + button.copy")
选择<span class="code">
后最相邻的<button class="copy">
$("span#demo ~ img")
选择<span id="demo">
后所有<img>
2.5 过滤选择器
2.5.1 基本过滤
选择器 | 描述 | 示例 |
---|---|---|
:first |
选择第1个元素 | $("div:first") 选择第1个div 元素 |
:last |
选择最后1个元素 | $("div:last") 选择最后1个div 元素 |
:not(E1) |
去除所有E1 选择器匹配的元素 |
$("input:not(.my)") 选择class 不是.my 的所有input 元素 |
:even |
选择索引是偶数的所有元素,索引从0开始 | $("tr:even") 选择表格中所有偶数的行 |
:odd |
选择索引是奇数的所有元素,索引从0开始 | $("tr:odd") 选择表格中所有奇数的行 |
:eq(index) |
选择索引值是index 的元素,index 从0开始 |
$("tr:eq(1)") 选择表格行索引等于1的行 |
:gt(index) |
选择索引值大于index 的元素,index 从0开始 |
$("tr:gt(1)") 选择表格行索引大于1的行 |
:lt(index) |
选择索引值小于index 的元素,index 从0开始 |
$("tr:lt(1)") 选择表格行索引小于1的行 |
:header |
所取所有的标题元素 | $(":header") 选择网页中所有的<h1>~<h6> |
:animated |
选择当前正在执行动画的所有元素 | $("div:animated") 选择正在执行动画的div 元素 |
2.5.2 内容过滤
选择器 | 描述 | 示例 |
---|---|---|
:contains(text) |
选择含有text 文本内容的元素 |
$("div:contains('我')") 选择内容里包含我的所有div |
:empty |
选择不包含子元素或文本的空元素 | $("div:empty") 选择不包含子元素(含文本)的所有div 元素 |
:has(E1) |
选择包含有(E1 选择器匹配的元素)的所有元素 |
$("div:has(p)") 选择含有p 元素的所有div 元素 |
:parent |
选择含有子元素或文本的元素 | $("div:parent") 选择拥有子元素(包含文本)的所有div 元素 |
2.5.3 子元素过滤
选择器 | 功能描述 | 简单示例 |
---|---|---|
:nth-child(index/even/odd) |
选取每个父元素下的第index 个子元素或奇偶元素.(index 从1开始) |
:eq(index) 只匹配一个元素,而:nth-child(index) 将为每一个父元素匹配子元素,并且:nth-child(index) 的index 从1开始,而:eq(index) 的index 从0开始. |
:first-child |
选择每个父元素的第1个子元素 | :first 只选择单个元素,而:first-child 将为每个父元素匹配第1个子元素如:$(“ul li:first-child”) 选择每个<ul> 下的第一个<li> |
:last-child |
选取每个父元素的最后1个子元素 | $(“ul li:last-child”) 选择每个<ul> 下的最后一个<li> |
:only-child |
如果某个元素是它父元素中惟一的子元素,那么将会被匹配.如果父元素中含有其他元素,则不会被匹配 | $(“ul li:only-child”) 在中选取是惟一子元素的<li> |
:nth-child()
选择器详细功能描述:
:nth-child(even)
能选择每个父元素下的索引值是偶数的元素
:nth-child(odd)
选择出每个父元素下的索引值是奇数的元素
:nth-child(2)
选取每个父元素下的索引值等于2的元素
:nth-child(3n)
能选出每个父元素下的索引值是3的倍数的元素,n从0开始
:nth-child(3n+1)
能选取每个父元素下的索引值是3n+1的元素.n从0开始
3. jQuery
事件
页面对不同访问者的响应叫做事件,事件处理程序指的是当HTML
中发生某些事件时所调用的方法
页面中指定一个点击事件对应:
1 | $("p").click(function(){ |
其它的事件还有:
鼠标事件:
click
、dblclick
、mouseenter
、mouseleave
、hover
键盘事件:
keypress
、keydown
、keyup
表单事件:
submit
、change
、focus
、blur
文档、窗口事件:
load
、resize
、scroll
、unload
这里面有一个入口函数$(document).ready()
,简称$()
。$(document).ready()
与window.οnlοad=function(){}
的区别:
window.onload |
$(document).ready() |
|
---|---|---|
执行时机 | 必须等待网页全部加载完毕(包括 图片等),然后再执行包裹代码 | 只需要等待网页中的DOM 结构加载完毕,就能执行包裹的代码 |
执行次数 | 只能执行一次,如果第二次,那么 第一次的执行会被覆盖 | 可以执行多次,第N次都不会被上 一次覆盖 |
4. jQuery
操作元素动画
4.1 显示隐藏
可以使用hide()
和show()
方法来隐藏和显示HTML
元素:
1 | $("button").click(function(){ |
语法:
1 | //speed 规定隐藏/显示的速度 |
可以使用toggle()
方法来切换hide()
和show()
方法:
1 | $("button").click(function(){ |
4.2 淡入淡出
通过fade
,可以实现元素的淡入淡出效果。四种fade
方法,都可接收2个参数:
speed
:规定效果的时长callback
:完成后所执行的函数
fadeIn()
用于淡入已隐藏的元素:
1 | $("button").click(function(){ |
fadeOut()
方法用于淡出可见元素:
1 | $("button").click(function(){ |
fadeToggle()
方法可以在fadeIn()
与fadeOut()
方法之间进行切换,如果元素已淡出,则fadeToggle()
会向元素添加淡入效果;如果元素已淡入,则fadeToggle()
会向元素添加淡出效果:
1 | $("button").click(function(){ |
fadeTo()
方法允许渐变为给定的不透明度(值介于 0 与 1 之间):
1 | $("button").click(function(){ |
4.3 滑动
通过slide
,可以实现元素的滑入滑出效果。三种slide
方法,都可接收2个参数:
speed
:规定效果的时长callback
:完成后所执行的函数
slideDown()
方法用于向下滑动元素:
1 | $("button").click(function(){ |
slideUp()
方法用于向上滑动元素:
1 | $("button").click(function(){ |
slideToggle()
方法可以在slideDown()
与slideUp()
方法之间进行切换。如果元素向下滑动,则slideToggle()
可向上滑动它们;如果元素向上滑动,则slideToggle()
可向下滑动它们:
1 | $("button").click(function(){ |
4.4 自定义动画
animate()
方法用于创建自定义动画。
默认所有 HTML 元素都有一个静态位置,且无法移动。如需对位置进行操作,首先把元素的CSS position
属性设置为relative
、fixed
或absolute
才可。
1 | //必需的 params 参数定义形成动画的 CSS 属性。 |
1 | $("button").click(function(){ |
同时操作多个属性:
1 | $("button").click(function(){ |
animate()
方法可以用来操作大部分CSS
属性。当使用animate()
时,必须使用驼峰写所有的属性名,比如,必须使用paddingLeft
而不是padding-left
,使用marginRight
而不是margin-right
。
也可以定义相对值(该值相对于元素的当前值)。需要在值的前面加上+=
或-=
:
1 | $("button").click(function(){ |
4.5 停止所有动画
stop()
方法用于停止还在执行的动画或效果,适用于所有jQuery
效果函数,包括滑动、淡入淡出和自定义动画:
1 | //$(selector).stop(stopAll,goToEnd); |
5. jQuery
操作DOM
5.1 获取、改变元素内容
text()
:设置或返回所选元素的文本内容html()
:设置或返回所选元素的内容(包括 HTML 标记)val()
:设置或返回表单字段的值
获取内容:
1 | $("#btn1").click(function(){ |
1 | $("#btn1").click(function(){ |
改变内容:
1 | $("#btn1").click(function(){ |
5.2 获取、设置元素属性
attr()
方法用于获取、设置属性值:
1 | $("button").click(function(){ |
1 | $("button").click(function(){ |
5.3 添加、删除元素
append()
方法在被选元素的结尾插入内容:
1 | $("p").append("我是使用append插入的内容"); |
prepend()
方法在被选元素的开头插入内容:
1 | $("p").prepend("我是使用prepend插入的内容"); |
after()
方法在被选元素之后插入内容:
1 | $("p").after("我是使用after插入的内容"); |
before()
方法在被选元素之前插入内容:
1 | $("p").before("我是使用before插入的内容"); |
remove()
方法删除被选元素及其子元素:
1 | $("#div1").remove(); |
remove()
方法也可接受一个参数,允许对被删元素进行过滤
1 | $("p").remove(".text"); |
empty()
方法删除被选元素的子元素:
1 | $("#div1").empty(); |
5.4 操作CSS
addClass()
方法向元素添加class
属性:
1 | $("button").click(function(){ |
也可以在addClass()
方法中规定多个类:
1 | $("button").click(function(){ |
removeClass()
删除指定的class
属性:
1 | $("button").click(function(){ |
toggleClass()
对被选元素进行添加/删除类的切换操作:
1 | $("button").click(function(){ |
css()
方法设置或返回被选元素的一个或多个样式属性:
1 | //获取样式 |
5.5 获取尺寸
width()
方法设置或返回元素的宽度(不包括padding
、border
、margin
),height()
方法设置或返回元素的高度(不包括padding
、border
、margin
):
1 | $("button").click(function(){ |
innerWidth()
方法返回元素的宽度(包括padding
),innerHeight()
方法返回元素的高度(包括padding
):
1 | $("button").click(function(){ |
outerWidth()
方法返回元素的宽度(包括padding
和border
),outerHeight()
方法返回元素的高度(包括padding
和border
):
1 | $("button").click(function(){ |
outerWidth(true)
方法返回元素的宽度(包括padding
、border
、margin
),outerHeight(true)
方法返回元素的高度(包括padding
、border
、margin
)
1 | $("button").click(function(){ |
width()
和height()
方法也可用于指定元素宽度高度:
1 | $("button").click(function(){ |
6. jQuery
元素遍历
6.1 向上遍历DOM
树
parent()
方法返回被选元素的直接父元素,该方法只会向上一级对DOM
树进行遍历:
1 | $("span").parent().css({"color":"red","border":"2px solid red"} |
parents()
方法返回被选元素的所有祖先元素,它一路向上直到文档的根元素 (<html>
):
1 | $("span").parents().css({"color":"red","border":"2px solid red"} |
parentsUntil()
方法返回介于两个给定元素之间的所有祖先元素:
1 | $("span").parentsUntil("div").css({"color":"red","border":"2px solid red"}); |
6.2 向下遍历DOM
树
children()
方法返回被选元素的所有直接子元素:
1 | $("div").children().css({"color":"red","border":"2px solid red"}); |
find()
方法返回被选元素的后代元素,一路向下直到最后一个后代:
1 | //只选中span |
6.3 DOM
树中水平遍历
siblings()
方法返回被选元素的所有同胞元素:
1 | $("h2").siblings().css({"color":"red","border":"2px solid red"}); |
next()
方法返回被选元素的下一个同胞元素:
1 | $("h2").next().css({"color":"red","border":"2px solid red"}); |
nextAll()
方法返回被选元素的所有跟随的同胞元素:
1 | $("h2").nextAll().css({"color":"red","border":"2px solid red"}); |
nextUntil()
方法返回介于两个给定参数之间的所有跟随的同胞元素:
1 | $("h2").nextUntil("h6").css({"color":"red","border":"2px solid red"}); |
同理,prev()
获得匹配元素集合中每个元素紧邻的前一个同胞元素;prevAll()
获得当前匹配元素集合中每个元素的前面的同胞元素;prevUntil()
方法获得当前匹配元素集合中每个元素的前面的同胞元素。
6.4 遍历中的过滤
first()
方法返回被选元素的首个元素:
1 | $("div p").first().css("background-color","yellow") |
last()
方法返回被选元素的最后一个元素:
1 | $("div p").last().css("background-color","yellow") |
eq()
方法返回被选元素中带有指定索引号的元素:
1 | $("p").eq(1).css("background-color","yellow") |
filter()
方法允许您规定一个标准,匹配的元素会被返回:
1 | $("p").filter(".info").css("background-color","yellow") |
not()
方法返回不匹配标准的所有元素:
1 | $("p").not(".info").css("background-color","yellow") |
7. jQuery
中的Ajax
操作
7.1 Ajax
是什么?
全称:ASynchronous JavaScript And XML
(代表 异步JavaScript
和XML
)
Ajax
并不是编程语言,是一种用于创建快速动态网页的技术。
Ajax
组合了:浏览器内建的XMLHttpRequest
对象(从web
服务器请求数据)、JavaScript
和HTML DOM
(显示或使用数据)
Ajax
是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
通过在后台与服务器进行少量数据交换,Ajax
可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。传统的网页(不使用Ajax
)如果需要更新内容,必须重载整个网页页面。
同步与异步的区别在于,当用户发送同步请求时,当前页面不可以使用,服务器响应页面到客户端,响应完成,用户才可以使用页面;但当用户发送异步请求时,当前页面还可以继续使用,当异步请求的数据响应给页面,页面把数据显示出来。
sequenceDiagram participant B as Browser participant S as Server note left of B: Something happened. B->>+S: XHR(XMLHttpRequest) note left of B: Meanwhile, still working. S->>-B: Responce note left of B: Update page with JS.
7.2 jQuery
中Ajax
函数
通过jQuery AJAX
方法,可以使用HTTP
的get
和post
方法, 从远程服务器上请求文本、HTML
、XML
或JSON
,同时还能够把这些外部数据直接载入网页的被选元素中。
load()
方法从服务器加载数据,并把返回的数据放入被选元素中,
1 | $(selector).load(URL,data,callback); |
$.get()
方法通过HTTP GET
请求从服务器上请求数据。
1 | //$.get(URL,callback); |
$.post()
方法通过HTTP POST
请求从服务器上请求数据。
1 | //$.post(URL,data,callback); |
THE END感谢您的阅读~