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()
.eq(index)
filter(expr)/(fn)
:筛选出与指定表达式/函数匹配的元素集合。
(1).find("selecotr1")
查找所有子代
(2).children("selecotr1")
(1).parent()
(2).parents()
.parents(selector1)
(3).parentsUntil(selector1)
直到这个选择器,不包括这个选择器
(1)下面的同级兄弟:
1).next()
2).nextAll()
3).nextUntil()
后面所有兄弟,直到...
(2)上面的同级兄弟:
.prev()
.prevAll()
.prevUntil(selector)
(3) .siblings()
前后所有兄弟
.map()
映射
.not(selector)
过滤
.slice(a,b)
截取(包头不包尾)
也可截取string与array;
.has()
包含
.hasClass(className)
.is(表达式)
.css(一个值)
:获取样式(内联,内部,外部,未设置的样式)
1.add(selector)
,将selector指定的选择器对象添加到选择器范围中。该过滤器的功能也可以利用群组选择器实现。
2.end()
,将一个带有过滤器结构的jQuery对象返回其对应的选择器对象。
(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的值)
$("<h1></h1>")
内部插入
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)
.slideUp(speed,fn)
.slideDown(speed,fn)
.slideToggle(speed,fn)
.fadeIn(speed,fn)
淡入
.fadeOut(speed,fn)
淡出
.fadeToggle(speed,fn)
fadeTo(speed,opaity,fn)
指定改变到某个透明度
4.自定义动画注:由于fadeIn()和fadeOut()的边界是1和0,所以使用fadeTo()就无法使用fadeIn()或者fadeOut()
.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" />
<img src="./img/images/show/9/2.jpg"/>
<img src="./img/images/show/9/3.jpg" />
<img src="./img/images/show/9/4.jpg" />
<img src="./img/images/show/9/5.jpg" />
<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")
(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窗口的大小
(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
:
stopPropagation()
preventDefault()
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")
(3)移除绑定事件注:如果js有的事件,但是JQuery中没有,需要进行事件绑定使用,但是不需要触发。
移除元素绑定的所有事件
.off()
.unbind()
移除特定事件
.unbind("click")
移除特定事件的特定方法fn
.unbind("click",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()
:当图片加载失败时触发该事件。
$.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)