JQuery总结

  • JQuery总结已关闭评论
  • 417 次浏览
  • A+
所属分类:Web前端
摘要

1)标签选择器: $(“sel1”)2)id选择器: $(“#sel1”)3)class选择器:$(“.sel1”)4)通配选择器:$(“*”)


JQuery

一、选择器

1.基本选择器

1)标签选择器: $("sel1")

2)id选择器: $("#sel1")

3)class选择器:$(".sel1")

4)通配选择器:$("*")

5)群组选择器:$("sel1,sel2")

6)特殊用法:

$("div.box")

补充:

//设置单个css样式 $("选择器").css("属性","值"); //设置多个样式使用对象 $("选择器").css({   background:"#ccc",   color:"red" }); 

2.层级选择器

1)包含选择器:sel1 sel2

​ sel1 下的所有子代(包括所有子孙代)

2)子类选择器:sel1>sel2

​ sel1下的子一代

3)相邻选择器:sel1+sel2

​ sel1紧挨着的兄弟元素sel2(选出一个)

4)兄弟选择器: sel1~sel2

​ sel1后所有sel2元素(不需要相邻,可以选出所有)

3.伪类选择器

(1)特定位置选择器

1) :first:

2) :last

3) :eq(index) (索引从0开始)

(2)指定范围选择器

1) :even (索引为偶数

2) :odd (索引为奇数

3) :gt(index)

4) :lt(index)

(3)排除选择器

​ :not(选择器)

(4)匹配子元素的伪类选择器

与父元素相关。

1)E:first-child :

2):last-child

3)E:nth-child(index): ( nth 索引从1开始

​ A . :nth-child(even):

​ B . :nth-child(odd):

​ C . :nth-child(index)

​ D . :nth-child(2n):

​ E . :nth-child(2n+1):

4 ) :nth-last-child(index):

与父元素无关

5 )E :nth-of-type(index):(从前往后)

6 )E :nth-last-of-type(index): (从后向前)

7)E:hidden (选择出 所有display为none的元素

与父元素相关和与父元素无关

与父元素相关举例:

		<ul> 			<li>我是ul1</li> 			<li>我是ul2</li> 			<p>你好你好</p> 			<li>我是ul3</li> 			<li>我是ul4</li> 			<li>我是ul5</li> 			<p>你好你好</p> 		</ul> <script> //与父元素相关,获取不到"我是ul5" $("ul li:nth-last-child(1)").css("background-color","blue"); //与父元素无关(nth-last-of-type),可以获取到"我是ul5"的li $("ul li:nth-last-of-type(1)").css("background-color","blue"); </script> 

4.内容选择器

1):contains('内容')

2):empty (元素内容为空,空格不算空)

3):has(“a”)

5.属性选择器

1)$(“元素[属性='属性值']”)

2)$(“元素[属性!='属性值']”)

3)$(“元素[属性^='属性值']”) (^ 以“...”开头

4)$(“元素[属性$='属性值']”) ($ 以“...”结尾

5)$(“元素[属性*='属性值']”) (包含"..."

6.表单选择器

(1):text (选择出type为“text”)

(2):password

(3):submit

(4):radio

(5):checkbox

(6):button

(7):reset

(8):image

(9):file

(10):checked

(11):disabled (被禁用的表单元素

(12):enabled (未被禁用的元素

(12):selected

区分$(“input”)和$(“:input”):

$(“input”)是一个元素选择器,只能匹配input标记;

$(“:input”)是一个伪类选择器,几乎可以匹配所有的表单元素

二、过滤器

过滤器不可以单独使用,必须跟在选择器的后面使用。

过滤器是对选择器查询出的结果进行第二次筛选。

1.$(选择器).过滤器

.first()

.last()

2.下标过滤器

.eq(index)

3.表达式过滤器

filter(expr)/(fn):筛选出与指定表达式/函数匹配的元素集合。

4.后代层次关系

(1).find("selecotr1") 查找所有子代

(2).children("selecotr1")

5.上一级层次关系

(1).parent()

(2).parents()

.parents(selector1)

(3).parentsUntil(selector1) 直到这个选择器,不包括这个选择器

6.兄弟关系

(1)下面的同级兄弟:

​ 1).next()

​ 2).nextAll()

​ 3).nextUntil() 后面所有兄弟,直到...

(2)上面的同级兄弟:

.prev()

.prevAll()

.prevUntil(selector)

(3) .siblings() 前后所有兄弟

7.单一过滤器

.map() 映射

.not(selector)过滤

.slice(a,b)截取(包头不包尾)

也可截取string与array;

.has()包含

8.判定过滤器

.hasClass(className)

.is(表达式)

.css(一个值):获取样式(内联,内部,外部,未设置的样式)

9.串联过滤器

1.add(selector),将selector指定的选择器对象添加到选择器范围中。该过滤器的功能也可以利用群组选择器实现。

2.end(),将一个带有过滤器结构的jQuery对象返回其对应的选择器对象。

10.操作属性

(1).attr()(不能操作内置属性,用于操作常规属性,id,class,src等)

.attr(属性):一个值表示获取

.attr(属性,属性值):两个值表示设置

.removeAttr("属性"):

(2)prop()用于操作内置属性(比如checked,innerHTML等)

.prop(属性)

.prop(属性,属性值)

.removeProp("属性")

(3).addClass()

添加多个class:(1)addClass(class1 class2 class3)

(4).removeClass():移除class

(5).toggleClass(class1): 切换

(6)

.html():表示获取jquery对象的内容;

.html(参数):设置jquery对象的内容,传递的参数了可以为字符串,也可以为标签,也可以为“”

(7)

.text():表示获取jquery对象的文本内容;

.text("文本"):设置jquery对象的文本内容,但是不会解析标签,只能原样输出标签,当成文本传递。

(8).val() 获取值(表单input的值)

三、操作DOM

1.创建节点

$("<h1></h1>")

2.插入节点

内部插入

a.append(b) 在a的内部添加b

a.appendTo(b) a添加到b内部后面

a.prepend(b) 在a内部的前面添加b

a.prependTo(b)

节点剪切

如果是选择的是已存在的节点则会将已存在的节点剪切到指定位置

外部插入

a.after(b) 在a的外部后面添加b

a.insertAfter(b) 将a插入到b外部的后面

a.before(b)

a.insertBrfore(b)

节点包裹

//外包 $("span").wrap("<p></p>")  //每个span外面,外包一个p标签 //总包 $("span").wrapAll("<p></p>")  //所有span外面,整个外包一个p标签 //内包 $("div").wrapInner("<p></p>")  //div内包一个p //卸包 $("span").unwrap()         //可用于删除上一级父元素 

删除节点

两种方法都可以删除节点,并返回被删除的JQuery对象 $("div").remove()             //删除选择的节点(会删除原有事件)    $("div").detach()              //删除选择的节点(删除节点,但保留原有事件) //清空节点(只清空节点内容,不删除节点) $("div").empty() 

节点克隆(复制节点)

传参和不传参的区别

$("选择器").clone()             //不传参数true,不复制事件 $("选择器").clone(true)             //复制节点,包括节点的事件 

节点替换

js中标签替换

dom.outerHTML = "<p>我是被替换的标签</p>"

Jquery中节点替换

//指定元素替换成匹配元素 $("div").replaceWith("<p><p>")   //用p标签替换所有的div //用匹配元素替换成指定元素 $("span").replaceAll("a")      //用span标签替换掉所有的a标签 

四、JQuery动画

1.显隐动画

$("选择器").show(speed,fn) speed为速度(毫秒数),fn为回调函数

$("选择器").hide(speed,fn)

$("选择器").toggle(speed)

2.显隐滑动效果

.slideUp(speed,fn)

.slideDown(speed,fn)

.slideToggle(speed,fn)

3.淡入淡出效果

.fadeIn(speed,fn) 淡入

.fadeOut(speed,fn) 淡出

.fadeToggle(speed,fn)

fadeTo(speed,opaity,fn) 指定改变到某个透明度

注:由于fadeIn()和fadeOut()的边界是1和0,所以使用fadeTo()就无法使用fadeIn()或者fadeOut()

4.自定义动画

.animate({属性1:属性值1,属性2:属性值2},speed,linear,fn)

第三个参数linear为匀速,默认值为easy减速

有先后执行顺序的动画(三种方式)

(1)将后执行的动画写入回调函数fn

(2)链式调用: $("选择器").animate().animate()

(3)队列式调用:$("选择器").animate();$("选择器").animate();

让图片水平居中在容器内部

(1)

将盒子定位到容器中间

left:50%

top:50%

用margin拉回

margin-left:-50%

margin-top:盒子高的一半

(2)

第一张图片:display:inline-block

让图片水平居中:text-align:center

让图片垂直居中:vertical-align:middle

注:由于vertical-align是相对于某个元素垂直居中,所以要加空白盒子

height:100%;

vertical-align:middle;

display:inline-block;

无缝滚动实例

思路:

1.设置当前索引curIndex,和前一张索引prevIndex。(curIndex为下一次要显示的图片索引,prevIndex为现在看见的图片)

2.点击下一张按钮,图片向左移动;点击前一张按钮,图片向右移动

3.滑动前将要滑入的图片放指定位置,现在的照片prevIndex划走,要滑入的照片curIndex进入

style样式

		<style type="text/css"> 			* { 				margin: 0; 				padding: 0; 			}  			.box { 				width: 800px; 				height: 550px; 				border: 1px solid #000; 				margin: 50px auto; 				position: relative; 				overflow: hidden; 			}  			li { 				list-style: none; 			}  			.imgList { 				width: 800px; 				height: 550px; 				position: relative; 				overflow: hidden; 			}  			.imgList li { 				position: absolute; 				left: 800px; 			} 			.box img { 				width: 800px; 				height: 550px; 				position: absolute; 				left: 800px; 			} 			.btn { 				font-size: 40px; 				color: #fff; 				width: 50px; 				height: 80px; 				box-shadow: 0 0 18px #fff; 				position: absolute; 				top: 230px; 				text-align: center; 				line-height: 80px; 				border-radius: 50%; 				cursor: pointer; 			} 			#prev { 				left: 50px; 			} 			#next { 				right: 50px; 			} 			.nav { 				height: 50px; 				text-align: center; 				position: absolute; 				width: 100%; 				bottom: 30px; 			} 			.nav li { 				display: inline-block; 				width: 30px; 				height: 30px; 				background: #ccc; 			} 			.nav .on { 				background: #333; 			} 		</style> 

html主体部分

		<div class="box"> 			<img style="left: 0px;" src="./img/images/show/9/1.jpg" alt="JQuery总结" /> 			<img src="./img/images/show/9/2.jpg" alt="JQuery总结"/> 			<img src="./img/images/show/9/3.jpg" alt="JQuery总结" /> 			<img src="./img/images/show/9/4.jpg" alt="JQuery总结" /> 			<img src="./img/images/show/9/5.jpg" alt="JQuery总结" /> 			<div id="prev" class="btn"><</div> 			<div id="next" class="btn">></div> 			<ul class="nav"> 				<li class="on"></li> 				<li></li> 				<li></li> 				<li></li> 				<li></li> 			</ul> 		</div> 

js部分(使用Jquery实现)

		<script src="js/jquery-1.11.3.js"></script> 		<script> 			var prevIndex = 0; 			var curIndex = 0; 			$("#next").click(function() { 				//.is(":animated"):正在执行动画返回true,没在执行动画返回false 				if ($(".box>img").eq(curIndex).is(":animated")) { 					return; 				} 				if (curIndex >= $(".box>img").length - 1) { 					curIndex = 0; 				} else { 					curIndex++ 				} 				tab(); 				prevIndex = curIndex; 			}) 			$("#prev").click(function() { 				if ($(".box>img").eq(curIndex).is(":animated")) { 					return; 				} 				if (curIndex <= 0) { 					curIndex = $(".box>img").length - 1; 				} else { 					curIndex--; 				} 				tab(); 				prevIndex = curIndex; 			}) 			$(".nav li").click(function() { 				curIndex = $(this).index(); 				if (curIndex == prevIndex) { 					return; 				} 				tab(); 				prevIndex = curIndex; 			}) 			//左边按钮:向右边滑动; 			function tab() { 				//切大图; 				if (curIndex == 0 && prevIndex == 4) { 					//边界2,当前在最后一张,点击next 					//向左滑动:前一张向左滑动,当前那一张摆放在右边,滑动到当前位置; 					$(".box>img").eq(prevIndex).animate({ 						left: -800 					}, 1000) 					$(".box>img").eq(curIndex).css("left", "800px").animate({ 						left: 0 					}, 1000) 				} else if (prevIndex == 0 && curIndex == 4  ) { 					//边界1,当前在第一张,点击prev 					//向右滑动:前一张向右滑动,当前那一张摆放在左边,滑动到当前位置 					$(".box>img").eq(prevIndex).animate({ 						left: 800 					}, 1000) 					$(".box>img").eq(curIndex).css("left", "-800px").animate({ 						left: 0 					}, 1000) 				} else if (curIndex > prevIndex) { 					$(".box>img").eq(prevIndex).animate({ 						left: -800 					}, 1000) 					$(".box>img").eq(curIndex).css("left", "800px").animate({ 						left: 0 					}, 1000) 				} else { 					$(".box>img").eq(prevIndex).animate({ 						left: 800 					}, 1000) 					$(".box>img").eq(curIndex).css("left", "-800px").animate({ 						left: 0 					}, 1000) 				} 				//切小点; 				$(".nav li").eq(curIndex).addClass("on").siblings().removeClass() 			} 		</script> 

5.动画执行

清除动画计时器

.stop(true)

.stop(true,true) 传入两个值比传入一个值清除更快

判断是否正在运动

.is(":animated")

五、Event事件

一、定位与尺寸

1、获得jQuery对象的尺寸:

(1).css(“width”)获取width(带有px),和margin/padding/border无关。

(2).width()/.height():获取width(不带有px),和margin/padding/border无关。

Js:offsetWidth:获取的是width+border+padding(不带单位),与margin无关。

(3).innerWidth()/innerHeight()获取的是windth+padding(不带单位),与border与margin无关。

(4).outerWidth(true):获取width+padding+margin+border(不带单位)

.outerWidth(false):获取width+padding+border(不带单位)==js的offsetWidth

(1)区别$(document).width():大小取决于内容的大小

(2)与$(window).width():取决于window窗口的大小

2、获得jQuery对象的定位位置

(1)绝对定位:利用offset()方法获得的定位对象又具备两个属性:

.offset().left:永远相对于浏览器的位置,元素相对于document的left(不带)

(2)相对定位:jQuery对象使用position()方法获得相对定位对象。

取决于父元素写了position定位的父盒子。

.position().left

二、滚动事件:

scrollLeft():设置/获取水平滚动条滚走的左侧距离。

scrollTop():设置/获取垂直滚动条滚走的顶部距离。

不传值表示获取垂直滚动条滚走的顶部距离。

传值表示设置值。

三、Event事件:

1、Event属性:

type:获取事件类型名称

target:发生事件的节点

keyCode:只针对于keypress事件,获取键盘键数字 按下回车,13

2、鼠标位置

pageX:光标对于页面原点的水平坐标 body,document

pageY:光标对于页面原点的垂直坐标

clientX:光标对于浏览器窗口的水平坐标 浏览器

clientY:光标对于浏览器窗口的垂直坐标

screenX:光标对于电脑屏幕的水平坐标 电脑屏幕

screenY:光标对于电脑屏幕的垂直坐标

offsetX:鼠标相对于事件源的位置

offsetY:

3.阻止冒泡

stopPropagation()

4.阻止对象的默认行为

preventDefault()

5. 事件绑定

(1)on()bind()方法基本相同
$("btn").bind("click",function(){...}) //同一个元素写不同事件执行相同的方法 $("btn").bind("click mouseover mouseout",function(){...}) //同一个元素写不同事件执行不同的方法(写成对象的方式) $("btn").bind({   click:function(){...},   mouseover:function(){...} })  

不同点:on(事件,selector,参数,fn),on存在事件委托

//h1将事件click委托给body,实际上仍然是“h1”操作 $("body").on("click","h1",function(){...}) 
(2)自定义事件

.bind("say",function(){...})

触发自定义事件

.trigger("say")

注:如果js有的事件,但是JQuery中没有,需要进行事件绑定使用,但是不需要触发。

(3)移除绑定事件

移除元素绑定的所有事件

.off()

.unbind()

移除特定事件

.unbind("click")

移除特定事件的特定方法fn

.unbind("click",fn)

(4)one(事件,fn)

该事件只执行一次。常用于请求后台数据时。

四、事件类型名:

1、鼠标事件:(7个)

click(鼠标单击左键)、dlbclick(鼠标双击左键)、mouseover(鼠标划入)、mouseout(鼠标划出)、mousemove(鼠标移动)、mouseenter(鼠标进入)、

mouseleave(鼠标移开)、mouseup(鼠标抬起)、mousedown(鼠标按下)。

Mouseenter与mouseover的区别:mouseenter只作用于本身,不会作用于子元素。

2、键盘事件:(3个)

keypress、keyup、keydown

3、表单元素事件:

表单事件:

(1).submit():form.submit()提交

.submit(fn):当提交时执行fn函数

(2)form.reset():重置 只针对dom元素

当重置时执行

$("form").bind("reset",function(){   alert("确定重置吗") }) 

表单元素事件:

.focus();获得焦点

.focus(fn):当获得焦点时执行

(1)blur():同focus

(2).focusin()

(3).focusout()

(4).change():当改变时执行;

(5).select():选中

.select():输入框里的值被全部选中

.select(fn):当输入框的值被选中时执行fn

(6)input():作用于所有form元素(要使用事件绑定)

4、浏览器事件:

resize():当浏览器的大小发生变化时触发该事件。

.scroll():当浏览器滚动条发生滚动时触发该事件。

5、其它事件:

.load():当页面加载后触发该事件,多用于JavaScript的window对象中。

.unload():当页面卸载(关闭页面)时触发该事件。

.Beforeunload():离开页面(更新网址,关闭网页)之前执行; .error():当图片加载失败时触发该事件。

6.释放JQuery

$.noConflict()

仅仅释放JQuery的$,JQuery仍然代表JQuery

可以指定新字符代表JQuery

var j = $.noConflict();    //j代表JQuery 

六、JQuery异步操作(Ajax)

1.js中的Ajax

js中的Ajax

//1.创建对象 request = new XMLHTTPRequest(); //2.链接后台 request.open("GET","接口地址"); //3.发送 request.send();  //请求成功 request.onload=function(){   data = request.responseText;   //返回的数据   console.log(JSON.parse(data)); } //请求失败 request.onerror=function(){    } //请求状态改变 request.onreadystatechange=function(){    } 

Promise

三种状态(状态不可逆

1.Pending(待定):初始状态,既没有被兑现也没有被拒绝

2.fulfilled(已兑现):操作成功完成

3.regected(已拒绝):操作失败

//成功执行then,失败执行catch  			new Promise(function(resolve, reject) { 				var request = new XMLHttpRequest(); 				request.open("GET","接口地址"); 				request.send(); 				request.onload = function() { 					//resolve提交到then 					resolve(request.responseText) 				} 				request.onerror = function() {           //regect提交到catch 					reject("error"); 				} 			}).then(function(res) { 				console.log(JSON.parse(res)) 				var val = JSON.parse(res); 				console.log(val.data[1].icon); 			}).catch(function(rej) { 				console.log(rej) 			})  

2.JQuery中的异步请求

链接网页

$("sel").load("head.html") 

$.get()和$.post()

$.get()与$.post()使用方式相同

$.get()传参的三种方式

(1)url传参(问号分隔)

$.get("地址?type=1",function(res){...})

(2)字符串传参(多个值用&分隔)

$.get("地址","type=1",function(res){...})

(3)JSON传参

$.get("地址",{type:1},function(res){...})

$.ajax

$.ajax({   type:"get",   url:"地址",   data:{type:"值"},   success:function(res){     //请求成功返回的数据     console.log(res);   },   error:function(rej){     console.log("error");   } }) 

不同页面间传递数据

1.浏览器存储传参

//存值 localStorage.setItem("myId","值"); //获取值 localStorage.getItem("myId"); 

2.url地址传参

地址栏中通过?分隔传参,传多个参数再用&分隔

window.location.search得到url中的参数

//获取地址栏中参数的值,name为参数的名字 GetQueryString: function(name) { 		//定义正则,用于获取相应参数 		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); 		//字符串截取,获取匹配参数值 		var r = window.location.search.substr(1).match(reg); 		// console.log(r) 		//但会参数值 		if (r != null) return r[2]; 		return null; 	} 

拓展:url中的参数加密解密

加密:

u=encodeURIComponent("要加密的str");

解密:

decodeURIComponent(u)