JQuery
一、JQuery对象
不管是JavaScript还是css,还是JQuery都是对标签进行操作,所以我们的总体步骤都是先找到标签,然后再对标签进行操作。对于JavaScript来说,用id找到只有一个,用class找到的不管你存在几个,得到永远是一个数组,JavaScript的方法是在DOM对象的基础上进行的,而且只能对DOM对象进行操作;对于JQuery来说,不管你用什么方法找的,得到的永远就是一个数组,意味着JQuery对象就是一个数组,这个数组是由DOM对象组成,JQuery的方法只能对JQuery对象进行操作。DOM对象和JQuery对象是可以切换的。
ss为JQuery对象,ss1为DOM对象。
ss[索引] #现在JQuery对象就转换成DOM对象了,就可以用DOM对象的方法来对它进行操作
$(DOM) #现在DOM对象就转换成JQuery对象了,也就可以用JQuery对象的方法来对它进行操作
二、寻找元素
1,选择器查找,语法:$('选择器'),选择器的用法和css一样
基本选择器
$('*')所有标签 $('.class')类选择器 $('#id')id选择器 $('p')标签选择器 $('.class,p,#id')并集选择器 $('p.class')交集选择器
层级选择器
$('.class p')后代选择器 $('.class>p')儿子选择器 $('.class+p')兄弟选择器 $('.class~p')毗邻选择器
基本筛选器
$('li:first')li标签选出来的第一个 $('li:eq(3)')第三个 $('li:even')偶数个0,2,4 $('li:odd')奇数个1,3,5 $('li:gt(1)')大于1 $('li:lt(3)')小于3
属性选择器
$('[属性名]')有这属性的所有标签 $('[属性名=值]')找到属性名=值的标签
表单选择器
$('[type="text"]')可以写成$(':text') 只适用于input标签
2,筛选器
2.1 过滤筛选器
$('li').eq(3) 相当于于$('li:eq(3)')
$('li').first() 等等都是一样的
而且这种用法比基本选择器好用
2.2 查找选择器
查找子标签: $("div").children(".test")只在儿子中找 $("div").find(".test")后代都找
向下查找兄弟标签: $(".test").next()后一个兄弟 $(".test").nextAll()后面的所有兄弟 $(".test").nextUntil(#id)后面在id之前的兄弟
向上查找兄弟标签: $("div").prev()前一个兄弟 $("div").prevAll()前面所有兄弟 $("div").prevUntil(#id)前面在id之后的兄弟
查找所有兄弟标签: $("div").siblings()所有的兄弟
查找父标签: $(".test").parent()父级 $(".test").parents()所有的父级 $(".test").parentUntil(#id)在#id级下的父级
三、操作元素
1,文本操作
$('选择器').html() 相当于js中的DOM对象的innerHTML,拿到文本
$('选择器').text() 相当于js中的DOM对象的innerText,y也是拿到文本,
$('选择器').html('nihao') 相当于js中的DOM对象的innerHTML='nihao',进行赋值操作
$('选择器').text('nihao') 相当于js中的DOM对象的innerText=‘nihao’,进行赋值操作
html()和text()两者的区别和js中是一样的
2,事件
2.1 绑定
$('选择器').click(function(){})
对比于js,去掉了‘on’,去掉了‘=’号;而且JQuery对象是一个数组,里面放了n个DOM对象,事件绑定是为每个DOM对象都绑定上了事件,相当于内部自带一个for循环
2.2 委派
$('选择器').on('click','选择器',function(){})
如$('ul').on('click','li',function(){}) 为ul标签下的每个li标签绑定click事件
委派的用处在于:我们在为ul标签里添加li标签之后,添加的li也会具有click事件;但如果使用绑定事件,只会在最开始绑定的li标签才会有事件,后面添加的li就没有事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <ul id="dd"> <li>1111</li> <li>2222</li> <li>3333</li> <li>4444</li> <li>5555</li> </ul> <button id="d1">添加li标签</button> <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script> $('#dd').on('click','li',function () { alert('123') }); $('#d1').click(function () { $('#dd').append('<li>666</li>') }) </script> </body> </html>
2.3事件切换
hover事件:一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法
$('.body').hover(function () {
clearInterval(obj)
},function () {
obj=setInterval(function () {
GO_R()
},2000);
});
第一个参数为一个函数,当鼠标移动到元素上要触发的函数
第二个参数为一个函数,当鼠标移出元素触发的函数
3,属性操作
属性
$('选择器').attr('属性名') #得到属性名对应的值
$('选择器').attr('属性名','值') #设置属性
$('选择器').removeAttr('属性名') #删除属性名对应的属性
class属性
$('选择器').addclass('类名') #为class属性再添加一个类
$('选择器').removeclass('类名') #把class属性的一个类删除
css控制
$('选择器').css('属性名’,'值') 用css样式控制
$('选择器').css({'color':'red','fontSize':'35px'})
4,each循环
我们拿到的JQuery对象是一个数组,后面加上方法就是对数组里的每个DOM对象加上方法。但不是JQuery并没有提供我们想要的所有方法,所有我们手动加for循环也很重要,JQuery提供了一个each()方法,这就相当于for循环。
4.1 方式一
$.each(obj,fn) obj只能为数组或键值对象,相当于遍历数组
li=[10,20,30,40]; dic={name:"yuan",sex:"male"}; $.each(li,function(i,x){ console.log(i,x) i为索引,x为值 });
$.each(dic,function(i,x){ console.log(i,x) i为键,x为值 });
4.2 方式二
$('选择器').each(function(){
this就是每一个DOM对象,$(this)就变成JQuery对象了
在这里就可以对每一个加上方法
})
4.3 扩展
function f(){
for(var i=0;i<4;i++){
if (i==2){
return 相当于continue
}
console.log(i)
}
}
-----------------------------------------------------------------------
for(var i in obj){
ret=func(i,obj[i]) ;
if(ret==false){
return False ; 相当于break
}
}
// 这样就很灵活了:
// <1>如果你想return后下面循环函数继续执行,那么就直接写return或return true
// <2>如果你不想return后下面循环函数继续执行,那么就直接写return false
5,节点操作
//创建一个标签对象 $("<p>") //内部插入 $("").append(content|fn) ----->$("p").append("<b>Hello</b>");在p标签里的最后面插入b标签 $("").appendTo(content) ----->$("p").appendTo("div"); 把p标签插入div标签里的最后面 $("").prepend(content|fn) ----->$("p").prepend("<b>Hello</b>");在p标签里的最前面插入b标签 $("").prependTo(content) ----->$("p").prependTo("#foo"); 把p标签插在foo标签的最前面 //外部插入 $("").after(content|fn) ----->$("p").after("<b>Hello</b>"); 在p标签的后面插入b标签 $("").before(content|fn) ----->$("p").before("<b>Hello</b>"); 在p标签的前面插入b标签 $("").insertAfter(content) ----->$("p").insertAfter("#foo"); $("").insertBefore(content) ----->$("p").insertBefore("#foo"); //替换 $("").replaceWith(content|fn) ----->$("p").replaceWith("<b>Paragraph. </b>"); 把p标签换成b标签 //删除 $("").empty() 把里面包含的内容清空,但标签还在 $("").remove([expr]) 直接把标签给删除 //复制 $("").clone([Even[,deepEven]])
6,动画效果
6.1 hide()隐藏,show()显示,toggle()相反的
6.2 fadeIn()淡入,fadeOut()淡出,fadeToggle相反的,fadeTo()可以设置透明度
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="jquery-2.1.4.min.js"></script> <script> $(document).ready(function(){ $("#in").click(function(){ $("#id1").fadeIn(1000); }); $("#out").click(function(){ $("#id1").fadeOut(1000); }); $("#toggle").click(function(){ $("#id1").fadeToggle(1000); }); $("#fadeto").click(function(){ $("#id1").fadeTo(1000,0.4); }); }); </script> </head> <body> <button id="in">fadein</button> <button id="out">fadeout</button> <button id="toggle">fadetoggle</button> <button id="fadeto">fadeto</button> <div id="id1" style="display:none; 80px;height: 80px;background-color: blueviolet"></div> </body> </html>