JQuery
1. 介绍
JQuery ,即JavaScript 和Query (查询),是辅助JavaScrip 开发的js类库
JQuery的核心思想:write less,do more ,实现了很多浏览器的兼容问题
JQuery免费开源,语法设计可以使开发更加便捷,例如操作文本对象,选择DOM对象,制作动画效果,事件处理,使用Ajax以及其他功能。
官网:jQuery
2. 核心函数
怎么为按钮添加相应函数
- 使用JQuery查询到标签对象
- 使用
标签对象.click( function() { } )
在JQuey中$ 称为核心函数,能完成JQuery的很大功能,$() 就是调用这个函数
$ 作用:
-
传入参数为函数时,表示页面加载完成之后,相当于 window.onload = function() {} -
传入是HTML字符串时,会给我们创建这个html 对象 -
传入参数是选择器字符串时, $("#id01") : id选择器,根据id查询标签对象 $(".class属性值") : 类型选择器 $("标签名") : 标签选择器 -
传入的是dom对象时,会把dom 对象转化为JQuery对象
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>jQueryHello</title>
<script type="text/javascript" src="../lib/jquery-3.5.1.js"> </script>
<script type="text/javascript">
$( function () {
var $btnObj = $("#btn01");
$btnObj.click(function () {
alert("JQuery Hello Word");
});
$("<div> <span>div里面的span01标签</span> </div>").appendTo("body");
});
</script>
</head>
<body>
<button id="btn01">SayHello</button>
</body>
</html>
其他函数:
jquery对象.click( function() { }) : 绑定单击事件,传入一个函数,这个也有this参数
jquery对象.css("...", "...") : 设置和获取样式,一个属性,一个值
jquery对象.each( function() { }) : 遍历元素的方法,传入一个函数,是遍历做的工作
函数内部有个隐形参数this ,就是当前操作的的dom对象
var $ch = $("checkbox:checked");
for (var i = 0; i < $ch.length; i++) {
alert($ch[i]);
}
$ch.each(function () {
alert(this);
})
$(document).ready(function () { }) === $(function () { }) 等价都是页面加载完成后
$(":text").val() val()可以操作表单项的value属性值,传值就是设置,不传就是获取
3. Dom对象和JQuery对象
-
区别 Dom对象:上面那些document.方法 得到的对象就是dom对象,alert显示object HTML标签名Element JQuery对象:通过JQuery提供的API创建出来的对象,查询出来的对象,通过$包装的dom对象,alert显示object Object 使用上的区别:JQuery对象不能使用Dom对象的属性和方法,Dom对象也不能使用JQuery对象的属性和方法
-
JQuery对象本质是什么? var $buttons = $("button");
for (var i = 0; i < $buttons.length; i++) {
alert($buttons[i]);
}
-
相互转化
1.先有dom对象 2. $(Dom对象)
1.先有jquery对象 2.jquery对象[下标]
4. JQuery的选择器
???
-
基本选择器 #id 例如:$(“#btn01”) element 例如:$(“div”) .class 例如:$(“.myClass”) * 全部 select1,select2,... 组合 说明:如果是p.myClass 代表必须是p标签而class属性是myClass
-
层级选择器 ancestor空格descendant 例如:找到form里面的所有input $("form input") parent > child 例如:在给定的父元素下取子元素,注意只取子元素,孙子元素不取 prev + next 例如: 匹配所有紧接着prev元素后的一个(同辈)next元素 $("label + input") prev ~ siblings 例如:匹配prev之后的所有(同辈的)siblings 元素(prev和siblings同辈)
<label> label1 </label>
<input type="text"/>
<label> label2 </label>
<input type="password"/>
<div> div </div>
<input type="file"/>
-
基本过滤选择器 :first 获取第一元素 ,例如 $("li:first") :last 最后一个元素 :not(selecter) 去除所以于给定选择器匹配的元素 例如:不要选中的 $("input:not(:checked)") ,除了myClass类外的所有按钮$("button:not(.myClass)") :even 匹配所有索引值为偶数的元素,从0开始计数 例如:查找表格的1,3,5…行 $("tr:even") :odd 匹配所有索引值为奇数的元素 :eq(index) 匹配给定索引值的元素,例如:查找表格第一行 $("tr:eq(1)") :gt(index) 匹配大于给定索引值的元素 :lt(index) 匹配小于给定索引值的元素 :header 匹配类似h1, h2, h3…之类的标题元素 :animated 匹配所有正在执行动画效果的元素 上面的可以组合使用,例如:选择没有执行动画的最后一个标签 $("div:not(:animated):last")
-
内容过滤选择器 :contains(text) 匹配给定文本的元素 :empty 匹配所有不包含子元素或者文本的空元素 :parent 匹配含有子元素或者文本的元素 (非空) :has(selector) 匹配含有选择器所匹配的元素的元素 <div> <p>Hello Word</p> </div>
<div> Hello Word </div>
-
属性过滤器选择器 [attribute] 匹配包含给定属性的元素,例如:$("div[id]") [attribute]=value 匹配给定属性是某个特定值的元素 [attribute]!=value 匹配不含有指定的属性或属性不等于特定值的元素 这样写可以过滤有属性且不等于特定值:$("div[name][name!=Jack]") [attribute]^=value 匹配给定属性是以某些值开始的元素,类似正则里面的 [attribute]$=value 匹配给定属性是以某些值结尾的元素 [attribute]*=value 匹配给定属性是以包含某些值的元素 [selector1][selector2][selector3] 复合属性选择器,需要同时满足多个条件时使用
-
表单过滤选择器 (以下为针对表单的) :input 匹配所有input,textarea,select,button 元素,用的少 :text 匹配所有的单行文本框, 例如: $(":text") :password :radio :checkbox :submit :image :reset :button :file , :hidden 匹配不可见的元素或者type为hidden的元素 这些都是匹配表单中冒号后面的所有元素
-
表单对象属性过滤 :enable 匹配所有可用元素 :disabled 匹配所有不可用元素 这样就是不可用了 :<input disabled="disabled" type="button" value/> :checked 匹配所有选中的被选中的元素(复选框,单选框,不包括select中的option) :select 匹配所有选中的option元素 例如:$("select option:select")
5. JQuery元素的筛选
var $ps = $("p");
$ps.eq(index) == :eq(index)
$ps.first() == :first()
$ps.last() == :last()
$ps.has(expr|ele) == :has()
$ps.filter(expr|obj|ele|fn)
$ps.is(expr|obj|ele|fn)
$ps.not(expr|ele|fn) == :not()
$ps.children([expr]) == parent>child
$ps.find(expr|obj|ele) == ancestor空格descendant
$ps.next([expr]) == prev+next
$ps.nextAll([expr]) == prev~siblings
$ps.nextUntil([exp|ele][,fil])
$ps.parent([expr])
$ps.prev([expr])
$ps.prevAll([expr])
$ps.prevUntil([exp|ele][,fil])
$ps.siblings([expr])
$ps.add(expr|ele|html|obj[,con])
7. JQuery的属性操作
html() : 设置/获取起始标签和结束标签里面的内容,和dom对象里面的innerHTML属性一样
text() :设置/获取起始标签和结束标签里面的文本,innerText一样
val() : 设置/获取表单项的value属性值,dom对象里面的value属性一样
不传参数是获取,传入是设置
val函数还能同时设计多个表单项的选中状态,批量操作复选框的选中状态
<script type="text/javascript">
$(":checkbox").val(["checkbox01","checkbox02"]);
$(":radio, :checkbox").val(["radio01", "checkbox01", "checkbox02"]);
</script>
<input type="checkbox" name="test01" value="checkbox01"/> checkbox01
<input type="checkbox" name="test01" value="checkbox02"/> checkbox02
<input type="radio" name="test01" value="radio01"> radio01
attr() 可以获取/设置属性的值, 传一个参数是获取指定属性的值,传入两个参数是设置属性的值,这个函数很强大,还可以操作非标准的属性,比如自定义属性:abc : abcValue…
不推荐操作checked,readOnly,selected,disabled…
prop() 和atter几乎一样,只推荐操作上面不推荐操作的
$(":checkbox:first").attr("name");
$(":checkbox:first").attr("name", "abc");
$(":checkbox:first").attr("checked");
$(":checkbox:first").prop("checked");
$(":checkbox:last").attr("checked");
$(":checkbox:last").prop("checked");
$(":checkbox").prop("checked", true);
<input type="checkbox" name="test01" value="checkbox01"/> checkbox01
<input type="checkbox" name="test01" checked="checked" value="checkbox02"/> checkbox02
8. DOM对象的增删改
-
内部插入 a.appendTo(b) 把a插入到b元素的末尾,成为最后一个子元素 , b可以是选择器 a.prependTo(b) 把a插入到b的子元素前面,成为第一个子元素 -
外部插入 a.insertAfter(b) 得到ba,同辈 a.insertBefore(b) 得到ab -
替换 old.replaceWith(new) 用new替换掉old,new可以是content|fn ,注意顺序 new.replaceAll(old) 用new替换掉old,old可以是selector 这两个函数功能一样都是替换全部,只是参数位置不同,replaceAll不能看字面意思 -
删除 a.remove() 删除a a.empty() 清空a标签里面的内容,标签还在
练习:动态删除添加表
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
<script type="text/javascript" src="../lib/jquery-3.5.1.js"></script>
<script type="text/javascript">
$(function () {
$("#addEmpButton").click(function () {
var empName = $("#empName").val();
var email = $("#email").val();
var salary = $("#salary").val();
var $tr = $("<tr> <td>"+ empName +"</td> " +
"<td>"+ email +"</td> " +
"<td>" + salary +"</td> " +
"<td> <a href='deleteEmp?id=001'>Delete</a> </td></tr>");
$tr.appendTo($("#empTable"));
$tr.find("a").click(deleteTr)
})
$("a").click(deleteTr);
});
var deleteTr = function() {
var $deleteTr = $(this).parent().parent();
if (confirm("确认删除"+ $deleteTr.find("td:first").text() +"吗?")) {
$deleteTr.remove();
}
return false;
};
</script>
</head>
<body>
<table id="empTable">
<tr>
<th>Name</th>
<th>Email</th>
<th>Salary</th>
</tr>
<tr>
<td>Tom</td>
<td>tom@qq.com</td>
<td>5000</td>
<td> <a href="deleteEmp?id=001">Delete</a></td>
</tr>
</table>
<br/>
<div id="formDiv">
<h4>添加新员工</h4>
<table align="center">
<tr>
<td>name</td>
<td> <input type="text" name="empName" id="empName"/> </td>
</tr>
<tr>
<td>email</td>
<td> <input type="text" name="email" id="email"/> </td>
</tr>
<tr>
<td>salary</td>
<td> <input type="text" name="salary" id="salary"/> </td>
</tr>
<tr>
<td colspan="2" align="center">
<button id="addEmpButton" value="abc">submit</button>
</td>
</tr>
</table>
</div>
</body>
</html>
9. JQuery操作CSS
addClass() 添加样式
removeClass() 删除样式
toggleClass() 有就删除,没有就添加样式
offset() 获取/设置元素的坐标
<!-- css-->
div.myClass {
border: 1px solid black;
}
<!-- js-->
$("div:first").addClass("myClass ")
$("div:first").offset({
top: 20,
left: 50
});
<!-- html-->
<div> hhhh </div>
10. JQuery动画
-
基本动画 show() 将隐藏的元素显示 hide() 将可见的元素隐藏 toggle() 可见是隐藏,不可见就显示,来回切换 以上动画都可以传入参数, 第一个参数是动画执行的时长,以ms为单位(其实修改元素的宽高来实现动画的) 第二个参数是动画的回调函数,回调函数是动画执行完自动调用的函数。 -
淡入淡出动画 fadeIn() 淡入(慢慢可见) , fadeOut() 淡出(慢慢不可见) fadeToggle() 淡入/淡出切换 这些方法也可以像上面一样传参!! fadeTo() 在指定的时长内慢慢将透明度修改为指定的值,0就是不可见,1就是完全可见,第一个参数是时间,第二个是指定透明度,第三个是回调函数。
练习 :商品的展开收缩演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test03</title>
<style type="text/css">
.showMore a span {
padding-left: 15px;
background: url("../images/up.jpg") no-repeat 1px 7px;
}
.showLess a span {
padding-left: 15px;
background: url("../images/down.jpg") no-repeat 1px 7px;
}
.promoted a {
color: #F50;
}
</style>
<script type="text/javascript" src="../lib/jquery-3.5.1.js"></script>
<script type="text/javascript">
$(function () {
$("li:gt(5):not(:last)").hide();
$("a:last").click(function () {
$("li:gt(5):not(:last)").toggle();
var flag = $("li:gt(5):not(:last)").is(":hidden");
if (flag) {
$("div div").removeClass();
$("div div").addClass("showMore");
$("a:last span").text("点击展开全部品牌");
$("li:contains(佳能9)").removeClass("promoted");
$("li:contains(佳能2)").removeClass("promoted");
} else {
$("div div").removeClass();
$("div div").addClass("showLess");
$("a:last span").text("点击收起");
$("li:contains(佳能9)").addClass("promoted");
$("li:contains(佳能2)").addClass("promoted");
}
return false;
})
})
</script>
</head>
<body>
<div class="SubCategoryBox" align="center">
<ul type="none">
<li><a href="...">佳能1</a> <i>(21341)</i></li>
<li><a href="...">佳能2</a> <i>(13341)</i></li>
<li><a href="...">佳能3</a> <i>(23141)</i></li>
<li><a href="...">佳能4</a> <i>(213413)</i></li>
<li><a href="...">佳能5</a> <i>(213131)</i></li>
<li><a href="...">佳能6</a> <i>(213123)</i></li>
<li><a href="...">佳能7</a> <i>(652341)</i></li>
<li><a href="...">佳能8</a> <i>(24341)</i></li>
<li><a href="...">佳能9</a> <i>(8135241)</i></li>
<li><a href="...">佳能10</a> <i>(01341)</i></li>
<li><a href="...">佳能11</a> <i>(121341)</i></li>
<li><a href="...">其他品牌相机</a> <i>(14141414)</i></li>
</ul>
<div class="showMore">
<a href="more.html"> <span>点击展开全部品牌</span> </a>
</div>
</div>
</body>
</html>
11. JQuery事件的操作
-
页面加载完成后 $(function() { })
window.onload = function() {}
执行顺序? jquery的先执行,原生的js后执行 jquery的页面加载完成之后是浏览器的内核解析完页面的标签创建好dom对象之后就会马上执行 原生的js的页面加载完之后,除了要等浏览器的内核解析完,页面的标签创建好DOM对象之后,还要等标签显示时需要的内容加载完成(例如iframe img)。 执行次数? jquer注册页面加载几个执行几个,依次把所有注册的function顺序执行。 原生的js只执行最后一个赋值的函数,因为被覆盖了
-
其他常见事件 ??? click() 可以绑定/触发单击事件,传func是绑定,不传参数是触发 blur() change() …都是把前面的on去掉了,使用方法和上面一样。 mouseover() 鼠标移入事件 mouseout() 鼠标移出事件 mousemove() 鼠标移动事件 bind() 可以给元素一次性绑定一个或多个事件 one() 使用上和bind一样,但one函数绑定的事件只会响应一次 unbind() 和bind函数相反的操作,解除事件的绑定 live() 可以用来绑定选择器匹配的所有元素的事件,那怕这个元素是后面动态创建出来的也有效
$("#buttons01").bind("click mouseover", function () { });
$("#buttons02").one("click mouseover", function () { });
$("#buttons01").unbind("click");
$("h1").live("click", function () { });
-
事件的冒泡 是指父子元素同时监听一个事件,当触发子元素的事件的时候,同一个事件也被传递到了父元素的事件中去响应。 如何阻止?再子元素事件函数体中,返回false ,即可阻止事件的冒泡传递 -
事件对象 事件对象:是封装有触发的事件的一个js对象 怎么拿到/使用? 在给元素绑定事件的时候,在事件的function(event) 参数列表添加一个参数,这个参数名习惯命名为event 我们可以在bind 绑定多给我事件的时候,根据判断不同的事件做不同的工作 $("div").bind("click mouseover", function (event) {
if (event.type == "click") {
console.log("点击");
}
else {
console.log("鼠标移入");
event.pageX;
event.pageY;
}
});
练习:选中大小图片
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test04</title>
<script type="text/javascript" src="../lib/jquery-3.5.1.js"></script>
<script type="text/javascript">
$(function () {
$("#small").bind("mouseover mouseout mousemove", function (event) {
if (event.type === "mouseover") {
$("#showBig").show();
} else if (event.type === "mouseout") {
$("#showBig").hide();
} else {
$("#showBig").offset({
top: event.pageY + 10,
left: event.pageX + 10
});
}
});
});
</script>
</head>
<body>
<img id="small" src="../images/small.jpg"/>
<div id="showBig">
<img src="../images/picture.jpg"/>
</div>
</body>
</html>
|