JQuery
概述
JQ是JS写的插件库,说白了,就是一个封装了很多方法的js文件,凡是用jq能实现的,js都能实现,js能实现的,jq却不一定能实现,JQuery可以帮助程序员,写更少的代码,实现更多的功能
引入方法
由于JQuery是一个插件库,所以需要手动去相关网站上去获取链接,或者时下载源码到本地,以下三种途径均可以获取:
https://www.bootcdn.cn/
前端开源项目共享平台
https://api.jquery.com
JQuery的官网
https://jquery.cuishifeng.cn
JQuery的中文官网,不过有可能不会及时更新
引入方式如下,src中的link是在线获取的JQ库
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script></script>
jq的API只对自己开放 jq不能用js的API js也不能用jq的API
jQuery API 3.3.1 速查表:http://jquery.cuishifeng.cn
基本使用
修改内容
html()
修改标签内的所有内容,可以识别html代码
<p>这是一段测试文字</p>
<script src="jquery.js"></script>
<script>
$("p").html("This is test text") //修改p标签中的显示文字//:This is test text
$("p").html("<h3>测试文字</h3>") //添加一段html源码//:测试文字
</script>
text()
只能修改标签内的内容,不会识别html代码
<p>这是一段测试文字</p>
<script src="jquery.js"></script>
<script>
$("p").html("This is test text") //修改p标签中的显示文字//:This is test text
$("p").html("<h3>测试文字</h3>") //添加一段html源码//:<h3>测试文字</h3>
</script>
val()
<input type="button" value="click">
<script src="jquery.js"></script>
<script>
$("input").val("OK"); //修改标签的value
</script>
eq()
获取指定的元素
<ul>
<li>111</li>
<li>222</li>
<li>333</li>
</ul>
<script src="jquery.js"></script>
<script>
var $oLi = $("ul li");
$oLi.eq(1).text("haha"); //修改下标为1的元素内容
</script>
JQ与JS之间转换
JS转JQ
关键字: $()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var test = document.querySelector(".test"); //定义js对象
// test.innerHTML = "abc"; //js常规修改用法
$(test).html("def"); //js对象转jq
</script>
JQ转JS
关键字:$obj[]
和$obj.get()
<div class="test">这是一段测试文字</div>
<ul>
<li>111</li>
<li>222</li>
<li>333</li>
</ul>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test"), //定义jq对象
$oLi = $("ul li");
$oTest[0].innerText = "111111"; //jq对象转js
$oLi.get(1).innerHTML = "222222"; //指定一个jq对象转js
</script>
鼠标操作
点击 click()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
$oTest.click(function () { //鼠标点击时触发函数内的事件
alert("click!"); //弹窗:click!
});
</script>
悬停 hover()
检测鼠标的移入和移出,hover方法内可以传入两个事件,分别对应移入和移出事件,如果之传入一个事件,则不论移入还是移除都会触发该事件
<div class="test" style="height: 200px;width: 200px;background: red">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
//hover事件
$oTest.hover(function () {
console.log("鼠标移入"); //第一个事件,当鼠标移入时执行
},function () {
console.log("鼠标移出"); //第二个事件,当鼠标移出时执行
});
</script>
增加内容
尾部增加 append() & 头部增加 prepend()
可以识别html标签
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
$oTest.append("append!"); //:这是一段测试文字append!
$oTest.append("<p>append!</p>"); //:append!
$oTest.prepend("prepend!"); //:prepend!这是一段测试文字
$oTest.prepend("<p>prepend!</p>"); //:prepend!
</script>
上一行增加 before() & 下一行增加 after()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
$oTest.before("before!"); //在上一行增加:before!
$oTest.before("<d>before!</d>"); //即使是行内的标签也会在上一行增加:before!
$oTest.after("after!"); //在下一行增加:after!
$oTest.after("<span>after!</span>"); //即使是行内的标签也会在下一行增加:after!
</script>
删除内容
删除子标签 empty()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
$oTest.empty(); //:删除了所有的内容,但是标签还在
</script>
删除自身 remove()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
$oTest.remove(); // 不传参,默认删除全部标签
</script>
操作属性
设置/获取 attr() & 移除 removeAttr()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
alert($oTest.attr("class")); // 获取属性值:"test"
$oTest.attr("class","qq"); // 设置属性及值:class="qq"
$oTest.removeAttr("class"); // 移除属性
</script>
添加 addClass() & 移除 removeClass()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
$oTest.addClass("qq"); //增加一个class名qq
$oTest.removeClass("qq"); //删除名为qq的class
</script>
有就删没有则加 toggleClass()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
$oTest.toggleClass("qq"); //没有class=qq,增加一个
$oTest.toggleClass("qq"); //有class=qq,删除
</script>
索引
each()
以每一个匹配的元素作为上下文来执行一个函数。
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script src="jquery.js"></script>
<script>
$("ul li").each(function (i) {//第一个参数默认是序号/下标/索引
// this.innerHTML = "我是第"+i+"个";
$(this).html("我是第"+i+"个");
});
</script>
索引 index()
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<script src="jquery.js"></script>
<script>
$("ul li").click(function () {
alert($(this).index()); //弹窗当前元素的索引
});
</script>
滚动条事件
scroll:http://jquery.cuishifeng.cn/scroll.html 当用户滚动指定的元素时,会发生 scroll 事件。
scrollTop:http://jquery.cuishifeng.cn/scrollTop.html 获取匹配元素相对滚动条顶部的偏移。
scrollLeft:http://jquery.cuishifeng.cn/scrollLeft.html 获取匹配元素相对滚动条左侧的偏移。
<div class="test2" style="height: 800px; width: 1800px;">test</div>
<script src="jquery.js"></script>
<script>
$(window).scroll(function () { //在检测到滚动事件是执行函数
console.log($(document).scrollTop()); //显示距离顶部的距离
console.log($(document).scrollLeft()); //显示距离左边的距离
});
</script>
查找
找class hasClass()
<div class="test">这是一段测试文字</div>
<script src="jquery.js"></script>
<script>
var $oTest = $(".test");
//hasClass 检查当前的元素是否含有某个特定的类,如果有,则返回true。否则返回false
alert($oTest.hasClass("test")); //返回布尔值:true
alert($oTest.hasClass("abc")); //返回布尔值:false
</script>
子/父/同辈标签查找
<body>
<div id="box" class="show">
<p class="box4">1</p>
<p class="box2">2</p>
<div class="wrap">
<p>3</p>
<p class="box4">4</p>
<span class="box4">5</span>
</div>
</div>
<script src="jquery.js"></script>
<script>
/*
children 找儿子 可以不传参数
find 不传参,默认不找 传参的话就找符合参数的后代
parent 不需要参数 只找父级
parents 会找所有的上代 直到html
parents(".show")找到名字叫做show的祖先
siblings 不传参找所有兄弟, 传参找所有符合条件的兄弟
*/
console.log($("#box").children());//只找id=box的儿子标签
console.log($("#box").find("p"));//找满足条件的后代
console.log($(".box4").parent());//找id=box的父标签:div.wrap
console.log($(".box4").parents());//找所有前辈标签:div.wrap, div#box.show, body, html
console.log($(".box4").parents(".show"));//找前辈标签一直找到class=show的标签:div#box.show
// $("p").siblings().css("color","red");//找所有同辈标签中符合color=red的标签
$("p").siblings(".box4").css("color","red");//找class=box4的同辈标签中符合color=red的标签
</script>
</body>
样式
距离 position() & offset()
position()代表到定位父级的 top/left的值;offset()代表到浏览器窗口的 top/left的值
<div class="box" style="
height: 400px;
width: 400px;
border: 2px solid skyblue;
position: relative;
margin: 150px auto">
<div class="lbox" style="
height: 100px;
width: 100px;
border: 2px solid red;
position: absolute;
left: 50%;
top: 50%;
"></div>
</div>
<script src="jquery.js"></script>
<script>
var $lBox = $(".box .lbox");
alert($lBox.position().left); //弹窗显示当前标签距离父类标签左边的距离:200
alert($lBox.position().top); //弹窗显示当前标签距离父类标签顶端的距离:200
alert($lBox.offset().left); //弹窗显示当前标签距离浏览器窗口左边的距离
alert($lBox.offset().top); //弹窗显示当前标签距离浏览器窗口顶端的距离
</script>
大小 width() & height()
<div class="box" style="
height: 400px;
width: 400px;
border: 2px solid skyblue;
position: relative;
margin: 150px auto">
<div class="lbox" style="
height: 100px;
width: 100px;
border: 2px solid red;
position: absolute;
left: 50%;
top: 50%;
padding: 50px;
margin: -50px -50px"></div>
</div>
<script src="jquery.js"></script>
<script>
var $lBox = $(".box .lbox");
alert($lBox.width()); // width: 100
alert($lBox.innerWidth()); // width+padding: 200
alert($lBox.outerWidth()); // width+padding+border: 204
alert($lBox.height()); // height: 100
alert($lBox.innerHeight()); // height+padding: 200
alert($lBox.outerHeight()); // height+padding+border: 204
</script>
操作样式
除了查询还可以修改样式
$lBox.width("300px");
alert($lBox.width());// width: 300
一次性设置修改多个样式
$lBox.css({
"width": "50px",
"height": "50px"
});
on() & off() 方法
on()
// on绑定单个事件
$("ul li").on("click",function () {
alert($(this).index()); //index()在jq里面是方法 对应的是你的下标
});
//on绑定多个事件
$("ul").on({
"click": function () {
console.log("click");
},
"mouseenter": function () {
console.log("mouseenter");
},
"mouseleave": function () {
console.log("mouseleave");
}
});
off()
$("ul").off(); //不传参 移除所有的事件
$("ul").off("mouseleave"); //移除满足条件的参数
动画
基本效果
改变宽、高、透明度
显示 show() & 隐藏 hide()
不传参 瞬间显示隐藏 传一个数字参数,代表毫秒,改变宽、高、透明度
<div class="lbox" style="
height: 100px;
width: 100px;
border: 2px solid red"></div>
<script src="jquery.js"></script>
<script>
var $lBox = $(".box .lbox"),
off = 0;
$(document).click(function () { //事件:当点击页面时触发下列动作
if (off){ //在lBox隐藏时执行
$lBox.show(2000); //在两秒内显示
}else { //在lBox显示时执行
$lBox.hide(2000); //在两秒内隐藏
}
off = !off; //执行完show/hide后将其取反,以便重复执行
})
toggle()
还有一个方法可以不用那么麻烦也能重复执行show/hide,就是使用toggle
$(document).click(function () {
$lBox.toggle(2000); //有则show,无则hide
})
改变高度
slideUp() & slideDown()
默认时间300毫秒 改变高度
<div class="lbox" style="
height: 100px;
width: 100px;
border: 2px solid red"></div>
<script src="jquery.js"></script>
<script>
var $lBox = $(".box .lbox"),
off = 0;
$(document).click(function () { //事件:当点击页面时触发下列动作
if (off){
$lBox.slideDown(2000); //在两秒内展开
}else {
$lBox.slideUp(2000); //在两秒内折叠
}
off = !off; //执行完slideUp/slideDown后将其取反,以便重复执行
})
slideToggle()
$(document).click(function () {
$lBox.slideToggle(2000); //有则slideUp,无则slideDown
})
改变透明度
默认时间300毫秒 改变透明度,fadeIn() / fadeOut() , 使用方法参考上面的改变高度
fadeTo(1000,0.1) 可以把透明度设置一个值,时间参数不能省略
小结
以上三组,不仅仅可以接受一个数字参数,能接受的参数有:
- number / string 代表动画时间(可缺省) 毫秒数 / (“fast” “normal” “slow”)
- string 代表运动曲线(可缺省)
- function 代表回调函数(可缺省)
更多方法请参阅:http://jquery.cuishifeng.cn/index.html