jQuery
1、jQuery 介绍
1.1、 介绍
需求:
给一个按钮绑定单击事件
使用 JS 中的 onclick 单击事件来完成
<script type="text/javascript">
window.onload = function () {
var element = document.getElementById("btnId");
element.onclick = function () {
alert("SayHello")
}
}
</script>
</head>
<body>
<button id="btnId">SayHello</button>
</body>
使用 jQuery 来完成给一个按钮绑定单击事件
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () { //表示页面加载完成之后,相当 window.onload = function () {}
var $btnId = $("#btnId"); // 表示按 id 查询标签对象
$btnId.click(function () { // 绑定单击事件
alert("jQuery 单击事件")
})
})
</script>
</head>
<body>
<button id="btnId">SayHello</button>
</body>
注意:
- 使用 jQuery 一定要引入 jQuery 库
- jQuery 中的 $ 是是一个函数
- jQuery 怎么为按钮添加点击响应函数的?
- 第一步,使用 jQuery 查询到标签对象
- 第二步,
标签对象.click( function(){} );
1.2、jQuery 核心函数 $
$ 是 jQuery 的核心函数,能完成 jQuery 的很多功能。
$()
就是调用 $ 这个函数
- 传入参数为 [ 函数 ] 时:
表示页面加载完成之后。相当于 window.onload = function(){} - 传入参数为 [ HTML 字符串 ] 时:
会为我们创建这个 html 标签对象 - 传入参数为 [ 选择器字符串 ] 时:
$(“#id 属性值”);
id 选择器,根据 id 查询标签对象
$(“标签名”);
标签名选择器,根据指定的标签名查询标签对象
$(“.class 属性值”);
类型选择器,可以根据 class 属性查询标签对象 - 传入参数为 [ DOM 对象 ] 时:
会把这个 dom 对象转换为 jQuery 对象
传入参数为 HTML 字符串时, 会创建这个 html 标签对象
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
//传入参数为[HTML字符串]时:根据这个字符串创建元素节点对象
$(function () {
$(
"<div>" + "<span>演示1</span>" + "<span>演示2</span>" + "</div>"
).appendTo("body");
})
</script>
传入参数为 DOM 对象时
var $1 = $(element);
传入的 dom 对象,输出为 jQuery 对象
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
var element = document.getElementById("btnId");
alert(element) //[object HTMLButtonElement],是dom对象
var $1 = $(element);
alert($1) //[object Object],是jquery对象
})
</script>
2、jQuery 对象和 dom 对象
2.1、二者区分
-
Dom 对象
DOM 对象 Alert 出来的效果是:[object HTML 标签名 Element] -
jQuery 对象
jQuery 对象 Alert 出来的效果是:[object Object]
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
var element = document.getElementById("btnId");
alert(element) //[object HTMLButtonElement],是dom对象
var $1 = $(element);
alert($1) //[object Object],是jquery对象
})
</script>
jQuery 对象本质上就是 dom 对象的数组 + jQuery 提供的一系列功能函数
但是jQuery 对象不能使用 DOM 对象的属性和方法 ,DOM 对象也不能使用 jQuery 对象的属性和方法
以下代码中:
遍历 jQuery 对象得到的是 4个 DOM 对象,可见 jQuery 对象是 dom 对象的数组
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
//通过 JQuery 提供的 API 查询到的对象
var button = $("button");
//遍历这个jQuery对象
for (var i = 0; i < button.length; i++) {
alert(button[i]) //遍历的结果是4个DOM对象
//[object HTMLButtonElement]、[object HTMLButtonElement]、[object HTMLButtonElement]、[object HTMLButtonElement]
}
});
</script>
jQuery 有一系列功能函数
css()
可以设置和获取样式
将标签名为button的对象设置颜色为红色
$("button").css("color","red")
将标签名为button的对象设置颜色为蓝色
$("button").style.color = "blue";
2.2、二者互转
- dom 对象转化为 jQuery 对象
- 先有 DOM 对象
$( DOM 对象 )
- jQuery 对象转为 dom 对象
- 先有 jQuery 对象
- jQuery 对象[下标]取出相应的 DOM 对象,即数组元素
3、jQuery 选择器★★★
3.1、基本选择器
选择器 | 描述 |
---|---|
#ID 选择器: | 根据 id 查找标签对象 |
.class 选择器 | 根据 class 查找标签对象 |
element 选择器 | 根据标签名查找标签对象 |
* 选择器 | 表示任意的,所有的元素 |
selector1,selector2 组合选择器 | 合并选择器 1,选择器 2 的结果并返回 |
selector1,selector2 组合选择器
示例:
注意组合选择器的逗号和内容都在一对双引号内
这里的p.class
是指标签名必须是 p 标签,并且 class 属性必须是 myClass
在 CSS 和 jQuery 中,div.mini
都是表示标签名为 div ,且 class 属性为 mini 的标签
案例1:
单击第一个按钮时,会将 id 为 one 的元素设置样式 “background-color”,颜色为"#bbffaa"
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
//1.选择 id 为 one 的元素 "background-color","#bbffaa"
$(function () { //注意这一步,不要忘记这是页面加载完成的步骤
//对象.click(function(){})
$("#btn1").click(function () {
//css()方法,可以设置和获取样式
$("#one").css("background-color","#bbffaa")
})
})
</script>
案例2:
单击第二个按钮时,选择 class 为 mini 的所有元素
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
//2.选择 class 为 mini 的所有元素
$(function () { //注意这一步,不要忘记这是页面加载完成的步骤
$("#btn2").click(function () {
$(".mini").css("background-color","#bbffaa")
})
})
</script>
案例3:
单击第三个按钮时,选择元素名是 div 的所有元素
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
//3.选择元素名是 div 的所有元素
$(function () { //注意这一步,不要忘记这是页面加载完成的步骤
$("#btn3").click(function () {
$("div").css("background-color","#bbffaa")
})
})
</script>
案例4:
单击第四个按钮时,选择所有的元素
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
//4.选择所有的元素
$(function () { //注意这一步,不要忘记这是页面加载完成的步骤
$("#btn4").click(function () {
$("*").css("background-color","#bbffaa")
})
})
</script>
案例5:
单击第五个按钮时,选择所有的 span 元素和id为two的元素
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
//5.选择所有的 span 元素和id为two的元素
$(function () { //注意这一步,不要忘记这是页面加载完成的步骤
$("#btn5").click(function () {
$("span,#two").css("background-color","#bbffaa")
})
})
</script>
3.2、层级选择器
选择器 | 描述 |
---|---|
ancestor descendant 后代选择器 | 在给定的祖先元素下匹配所有的后代元素 |
parent > child 子元素选择器 | 在给定的父元素下匹配所有的子元素 |
prev + next 相邻元素选择器 | 匹配所有紧接在 prev 元素后的 next 元素 |
prev ~ sibings 后面的兄弟元素选择器 | 匹配 prev 元素之后的所有 siblings 元素 |
ancestor descendant 后代选择器
只要在该标签之下,无论是子元素还是孙子元素,都可以查到
示例:
parent > child 子元素选择器
只是在该标签之下,只能查一代子元素,再往下的孙子元素等等就查不到了
示例:
prev + next 相邻元素选择器
示例:
prev ~ sibings 后面的兄弟元素选择器
查询所有与 prev 元素同辈的 sibings 元素
示例:
3.3、过滤选择器
3.3.1、基本过滤器
选择器 | 描述 |
---|---|
:first | 获取第一个元素 |
:last | 获取最后个元素 |
:not(selector) | 去除所有与给定选择器匹配的元素 |
:even | 匹配所有索引值为偶数的元素,从 0 开始计数 |
:odd | 匹配所有索引值为奇数的元素,从 0 开始计数 |
:eq(index) | 匹配一个给定索引值的元素 |
:gt(index) | 匹配所有大于给定索引值的元素 |
:lt(index) | 匹配所有小于给定索引值的元素 |
:header | 匹配所有标题,如 h1, h2, h3 之类的标题元素 |
:animated | 匹配所有正在执行动画效果的元素 |
:first 获取第一个元素
示例:
:not(selector) 去除所有与给定选择器匹配的元素
括号里面填的是表单对象属性过滤器
示例:
:even 匹配所有索引值为偶数的元素,注意从 0 开始计数
示例:
:eq(index) 匹配一个给定索引值的元素
注意索引从 0 开始
示例:
:header 匹配所有标题
示例:
$(":animated") //选择正在执行动画的元素
$("div:not(:animated):last") //选择没有执行动画的最后一个标签 div 标签
3.3.2、内容过滤器
选择器 | 描述 |
---|---|
:contains(text) | 匹配包含给定文本的元素 |
:empty | 匹配所有不包含子元素或者文本的空元素 |
:parent | 匹配含有子元素或者文本的元素 |
:has(selector) | 匹配含有选择器所匹配的元素的元素 |
:contains(text) 匹配包含给定文本的元素
示例:
:empty 匹配所有不包含子元素或者文本的空元素
和:parent 相对应,:parent是查询包含子元素或文本
示例:
:has(selector) 匹配含有选择器所匹配的元素的元素
括号里面的填入标签名就直接是标签名
填入 class 属性,就填入 .class
填入 id 属性,就填入 #id
示例:
3.3.3、属性过滤器
选择器 | 描述 |
---|---|
[attribute] | 匹配包含给定属性的元素 |
[attribute=value] | 匹配给定的属性是某个特定值的元素 |
[attribute!=value] | 匹配所有不含有指定的属性,或者属性值不等于特定值的元素 |
[attribute^=value] | 匹配给定的属性是以某些值开始的元素 |
[attribute$=value] | 匹配给定的属性是以某些值结尾的元素 |
[attribute*=value] | 匹配给定的属性是以包含某些值的元素 |
[attrSel1][attrSel2][attrSelN] | 复合属性选择器,需要同时满足多个条件时使用 |
示例:
[attrSel1][attrSel2][attrSelN]
复合属性选择器,需要同时满足多个条件时使用
注意是需要同时满足
基本选择器中的组合选择器是合并多个结果,是或者关系
示例:
3.3.4、表单过滤器
该类过滤器,是对表单中的 type 属性类型进行筛选
选择器 | 描述 |
---|---|
:input | 匹配所有 input, textarea, select 和 button 元素 |
:text | 匹配所有文本输入框 |
:password | 匹配所有的密码输入框 |
:radio | 匹配所有的单选框 |
:checkbox | 匹配所有的复选框 |
:submit | 匹配所有提交按钮 |
:image | 匹配所有 img 标签 |
:reset | 匹配所有重置按钮 |
:button | 匹配所有 input type=button 按钮 |
:file | 匹配所有 input type=file 文件上传 |
:hidden | 匹配所有不可见元素 display:none 或 input type=hidden隐藏元素 |
:text 匹配所有文本输入框
即指表单中,谁的 type 属性为 text 的元素
示例:
style="display:none;" 该属性的作用是不在页面上显示该标签
<div style="display:none;" class="none"></div>
在 CSS 中可以这么用
div.hide 表示标签为 div,class 属性值为hide的元素
div.hide {
display: none;
}
3.3.5、表单对象属性过滤器
该类过滤器,是对表单中的属性类型进行筛选
选择器 | 描述 |
---|---|
:enabled | 匹配所有可用元素 |
:disabled | 匹配所有不可用元素 |
:checked | 匹配所有选中的单选,复选 |
:selected | 匹配所有选中的 option |
什么叫可用和不可用?
disabled="disabled"
有这个属性的都是不可用的,按钮按不了,输入框也输入不了
有了这个属性disabled="disabled"就会变成不可用的
<input name="email" disabled="disabled" />
:checked 匹配所有选中的单选,复选
示例:
:selected 匹配所有选中的 option
select option 表示层级选择器中的后代选择器
示例:
案例1:
对表单内可用文本输入框进行赋值New Value
val()
可以操作表单项的value属性
表单项是指表单过滤器中的那些文本输入框、密码输入框、单选框、复选框
对表单内可用文本输入框进行赋值New Value
$("#btn1").click(function(){
$(":text:enabled").val("New Value");
});
案例2:
获取多选框选中的个数 使用size()方法获取选取到的元素集合的元素个数
size()
方法获取 jQuery 的元素个数
length()
方法获取 jQuery 的元素个数
$("#btn3").click(function(){
alert($(":checkbox:checked").size())
alert($(":checkbox:checked").length())
});
案例3:
获取选中的多选框中,每个的value值
each(function(){})
方法是 jQuery 对象提供的用来遍历元素的方法,将遍历体内要做的操作放进function函数体内
在遍历的function函数中,有个this
对象,指的就是当前遍历到的 dom 对象
第一种,使用给 jQuery 数组使用fori遍历
$("#btn4").click(function(){
var str = "";
var eles = $(":checkbox:checked");
console.log(eles);
for(var i=0;i<eles.size();i++){
str += "【"+$(eles[i]).val()+"】";
}
alert(str)
});
第二种,使用 jQuery 提供的 each() 方法进行遍历
$("#btn4").click(function(){
//each(function(){})方法是 jQuery 对象提供的用来遍历元素的方法,将遍历体内要做的操作放进function函数体内
//在遍历的function函数中,有个this对象,指的就是当前遍历到的 dom 对象
eles.each(function () {
// alert(this); //输出多个[object HTMLInputElement]
alert(this.value)
})
});
案例4:
获取选中的下拉框中,选中的内容
第一种,使用给 jQuery 数组使用fori遍历
$("#btn5").click(function(){
var str = "";
var els = $("select option:checked");
console.log(els);
for(var i=0;i<els.size();i++){
str += "【"+$(els[i]).val()+"】";
}
alert(str)
});
第二种,使用 jQuery 提供的 each() 方法进行遍历
$("#btn5").click(function(){
els.each(function () { //拿到被选中的option标签的dom对象
alert(this.innerHTML)
})
});
4、jQuery 元素筛选
filter()
筛选出与指定表达式匹配的元素集合
用逗号分隔多个表达式
示例:
查找body中选择所有 class属性值为one的 div子元素
$("body").children("div.one")
示例:
查找索引为偶数的 div 标签
$("div").filter(":even")
示例:
nextUntil(exp)
返回当前元素与exp元素之间的元素,不包括首尾
exp元素在当前元素的后面
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
$("div:first").nextUntil("span").addClass("after");
});
</script>
</head>
<body>
<div></div>
<div></div>
<div></div>
<span></span>
<div></div>
</body>
prevUntil(exp)
返回当前元素与exp元素之间的元素,不包括首尾
exp元素在当前元素的前面
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
$("div:last").prevUntil("span").addClass("after");
});
</script>
</head>
<body>
<div></div>
<span></span>
<div></div>
<div></div>
<div></div>
</body>
add()
将与方法括号中相匹配的元素添加到当前的 jQuery 对象中
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
alert($("div").length) //2
alert($("div").add("span").length) //3,是将 div 标签带着 span 标签一起
});
</script>
</head>
<body>
<div></div>
<span></span>
<div></div>
</body>
5、jQuery 的属性操作
不传参数是获取,传入参数是设置
alert($("div").html()) //获取中间元素,包括标签
alert($("div").html("<h1>div中的标题</h1>")) //设置值
text()
是只获取文本,不包括里面的子标签
html()
是里面的子标签和文本都获取
val()
是输入框的里面的值
单选框、多选框、下拉框被选中的操作
可以根据单选框的value值,控制单选框被选中
$(":radio").val(["单选框的value值"])
根据多选框的value值,批量控制多选框被选中
$(":checkbox").val(["多选框的value值","多选框的value值","多选框的value值"])
根据下拉框中标签option的value值,批量控制下拉选中
注意:前面是select标签,后面是option标签的value值
$("#select标签的id").val(["标签option的value值"])
也可以一次性让单选框、多选框、下拉框都完成选中
没有顺序限制,顺序颠倒也无所谓
$(
":radio",":checkbox","#select标签的id"
).val(
["单选框的value值","多选框的value值","多选框的value值","标签option的value值"]
)
attr()
传入一个参数是获取,传入两个参数就是设置值
$(":checkbox").attr("name") //获取name属性
$(":checkbox").attr("name","abc") //设置name属性为 abc
所以可以用此属性来为标签添加自定义属性
$(":checkbox").attr("aba","value") //自定义属性
对于多选框的checked属性,若此多选选项已被选中,就输出 checked,若未被选中,就输出 undefined
已被选中,输出 checked
未被选中,输出 undefined,官方觉得这个不对
$(":checkbox").attr("checked")
prop(key,value)
只推荐操作attr不方便操作的属性
prop(key,function(index,attr))
对于多选框的checked属性,若此多选选项已被选中,就输出 true,若未被选中,就输出 false
已被选中,输出 true
未被选中,输出 false
$(":checkbox").prop("checked",true) //选中多选框
6、jQuery 练习
6.1、全选,全不选,反选
$("table:eq(1) tr:even")
第二个表里面的偶数行,从0开始
在事件的function函数中,有个this对象,这个this对象是当前正在响应的jQuery对象中的dom对象
在each遍历的function函数中,有一个this对象,这个this对象就是当前遍历到的dom对象
本例中,分六个部分
<script type="text/javascript" src="../../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
//全选按钮
$("#checkedAllBtn").click(function () {
$(":checkbox").prop("checked",true)
})
//全不选按钮
$("#checkedNoBtn").click(function () {
$(":checkbox").prop("checked",false)
})
//反选按钮
$("#checkedRevBtn").click(function () {
//遍历所有内容选项的多选框,以此除掉【全选/全不选】的选框
$(":checkbox[name=items]").each(function () {
//实现反选
//在each遍历的function函数中,有一个this对象,这个this对象就是当前遍历到的dom对象
this.checked = !this.checked;
})
//要注意,是否满选,【全选/全不选】的选框对应变化
//获取内容选项的总个数
var size = $(":checkbox[name=items]").length;
//获取选中的内容选项的个数
var checkedsize = $(":checkbox[name=items]:checked").length;
if(size == checkedsize){
$(":checkbox#checkedAllBox").prop("checked",true)
}else {
$(":checkbox#checkedAllBox").prop("checked",false)
}
})
//展示按钮,即展示所选中的内容
$("#sendBtn").click(function () {
$(":checkbox[name=items]:checked").each(function () {
alert(this.value)
})
})
//根据【全选/全不选】的选框是否选中,来决定内容选框是否全选/全不选
//给【全选/全不选】的选框绑定单击事件
$("#checkedAllBox").click(function () {
//在事件的function函数中,有个this对象,这个this对象是当前正在响应的事件的dom对象
//即是$("#checkedAllBox")的dom对象
$(":checkbox[name=items]").prop("checked",this.checked)
})
//根据内容选框是否全选/全不选, 来决定【全选/全不选】的选框是否选中
//给内容选框绑定单击事件
$(":checkbox[name=items]").click(function () {
//获取内容选项的总个数
var size = $(":checkbox[name=items]").length;
//获取选中的内容选项的个数
var checkedsize = $(":checkbox[name=items]:checked").length;
if(size == checkedsize){
$(":checkbox#checkedAllBox").prop("checked",true)
}else {
$(":checkbox#checkedAllBox").prop("checked",false)
}
})
});
</script>
</head>
<body>
<form method="post" action="">
你爱好的运动是?<input type="checkbox" id="checkedAllBox" />全选/全不选
<br />
<input type="checkbox" name="items" value="足球" />足球
<input type="checkbox" name="items" value="篮球" />篮球
<input type="checkbox" name="items" value="羽毛球" />羽毛球
<input type="checkbox" name="items" value="乒乓球" />乒乓球
<br />
<input type="button" id="checkedAllBtn" value="全 选" />
<input type="button" id="checkedNoBtn" value="全不选" />
<input type="button" id="checkedRevBtn" value="反 选" />
<input type="button" id="sendBtn" value="提 交" />
</form>
</body>
6.2、从左到右,从右到左
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
select {
width: 100px;
height: 140px;
}
div {
width: 130px;
float: left;
text-align: center;
}
</style>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
//第一个按钮:选中添加到右边
$("button:eq(0)").click(function () {
$("select[name=sel01] option:selected").appendTo($("select[name=sel02]"))
//注意,使用appendTo()方法的时候,左边列表里面的option元素也会自动删除,不需要手动删除
// $("select[name=sel01] option:selected").remove() 该语句多余
})
//第二个按钮:全部添加到右边
$("button:eq(1)").click(function () {
$("select[name=sel01] option").appendTo($("select[name=sel02]"))
})
//第三个按钮:选中删除到左边
$("button:eq(2)").click(function () {
$("select:eq(1) option:selected").appendTo($("select:eq(0)"))
//注意,使用appendTo()方法的时候,前面列表里面的option元素也会自动删除,自动跳队进入后面列表
})
//第四个按钮:全部删除到左边
$("button:eq(3)").click(function () {
$("select:eq(1) option").appendTo($("select:eq(0)"))
})
})
</script>
</head>
<body>
<div id="left">
<select multiple="multiple" name="sel01">
<option value="opt01">选项1</option>
<option value="opt02">选项2</option>
<option value="opt03">选项3</option>
<option value="opt04">选项4</option>
<option value="opt05">选项5</option>
<option value="opt06">选项6</option>
<option value="opt07">选项7</option>
<option value="opt08">选项8</option>
</select>
<button>选中添加到右边</button>
<button>全部添加到右边</button>
</div>
<div id="rigth">
<select multiple="multiple" name="sel02">
</select>
<button>选中删除到左边</button>
<button>全部删除到左边</button>
</div>
</body>
6.3、动态添加、删除表格记录
confirm()
是JS提供的一个确认提示框函数,给他传什么,就提示什么
和alert的区别在于,这里的提示框有确定和取消按钮,alert仅仅显示文字内容
当用户点击了确定,该方法就会返回true,当用户点击了取消,就返回false
return false;
可以阻止元素的默认行为,在超链接里面阻止超链接跳转网页
$("a").click(function () {
return false;
})
return false;
可以阻止元素的默认行为,在 onsubmit 表单提交事件可以阻止提交
window.onload = function () {
formObj.onsubmit = function () {
return false;
}
}
<script type="text/javascript" src="../../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
//Submit按钮
$("#addEmpButton").click(function () {
//注意一定要定义变量再加进去,不然就是死的字符串
var n = $("#empName").val()
var n1 = $("#email").val()
var n2 = $("#salary").val()
var bb = $("<tr>"+
"<th>"+n+"</th>"+ "<th>"+n1+"</th>"+ "<th>"+n2+"</th>"+
"<td><a href=\"deleteEmp?id=001\">Delete</a></td>" +"</tr>");
bb.appendTo($("#employeeTable"))
//在添加Delete点击事件之后,要在这里单独加一段的代码,来完成新添加信息的Delete的点击事件
//这里是提交点击事件之内,只有提交按钮点击之后才会生效
bb.find("a").click(function () {
var $1 = bb.children(":first").html()
if(confirm("确定删除"+$1+"吗?")){
bb.remove()
}
return false;
})
})
//注意,此时仅仅设置了两个按钮的点击事件,此时Delete超链接点击事件是在页面加载完成之后就会执行的
//所以在运行之后,新添加的信息的Delete超链接仍然无效
//Delete超链接
$("a").click(function () {
//获取当前点击的Delete超链接所在的行标签tr
var aa = $(this).parent().parent();
//获取当前Delete超链接所控制删除的Name
var $1 = aa.children(":first").html()
//confirm()是JS提供的一个确认提示框函数,给他传什么,就提示什么
//和alert的区别在于,这里的提示框有确定和取消按钮,alert仅仅显示文字内容
//当用户点击了确定,该方法就会返回true,当用户点击了取消,就返回false
if(confirm("确定删除"+$1+"吗?")){
aa.remove()
}
//return false 可以阻止元素的默认行为,在这里阻止超链接跳转网页
//在 onsubmit 表单提交事件提到过
return false;
})
})
</script>
</head>
<body>
<table id="employeeTable">
<tr>
<th>Name</th>
<th>Email</th>
<th>Salary</th>
<th> </th>
</tr>
<tr>
<td>Tom</td>
<td>tom@tom.com</td>
<td>5000</td>
<td><a href="deleteEmp?id=001">Delete</a></td>
</tr>
<tr>
<td>Jerry</td>
<td>jerry@sohu.com</td>
<td>8000</td>
<td><a href="deleteEmp?id=002">Delete</a></td>
</tr>
<tr>
<td>Bob</td>
<td>bob@tom.com</td>
<td>10000</td>
<td><a href="deleteEmp?id=003">Delete</a></td>
</tr>
</table>
<div id="formDiv">
<h4>添加新员工</h4>
<table>
<tr>
<td class="word">name: </td>
<td class="inp">
<input type="text" name="empName" id="empName" />
</td>
</tr>
<tr>
<td class="word">email: </td>
<td class="inp">
<input type="text" name="email" id="email" />
</td>
</tr>
<tr>
<td class="word">salary: </td>
<td class="inp">
<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>
因为本例中的删除键的点击事件代码有重复,可以封装进单独的函数中,然后使用点击事件进行调用,升级优化,如下
var deletef = function(){
var aa = $(this).parent().parent();
var $1 = aa.children(":first").html()
if(confirm("确定删除"+$1+"吗?")){
aa.remove()
}
return false;
}
因为点击事件里面传入的是函数,而不是函数的返回值,所以注意函数进行调用时的写法
不能写成 deletef()
$("a").click(deletef);
6.4、CSS_动画 品牌展示
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>品牌展示练习</title>
<style type="text/css">
* {
margin: 0;
padding: 0;
}
body {
font-size: 12px;
text-align: center;
}
a {
color: #04D;
text-decoration: none;
}
a:hover {
color: #F50;
text-decoration: underline;
}
.SubCategoryBox {
width: 600px;
margin: 0 auto;
text-align: center;
margin-top: 40px;
}
.SubCategoryBox ul {
list-style: none;
}
.SubCategoryBox ul li {
display: block;
float: left;
width: 200px;
line-height: 20px;
}
.showmore , .showless{
clear: both;
text-align: center;
padding-top: 10px;
}
.showmore a , .showless a{
display: block;
width: 120px;
margin: 0 auto;
line-height: 24px;
border: 1px solid #AAA;
}
.showmore a span {
padding-left: 15px;
background: url(img/down.gif) no-repeat 0 0;
}
.showless a span {
padding-left: 15px;
background: url(img/up.gif) no-repeat 0 0;
}
.promoted a {
color: #F50;
}
</style>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function() {
var hidebox = $("li:eq(5)").nextUntil($("li:last"));
//给链接提供点击事件
$("div div a").click(function () {
//实现品牌隐藏或显示
hidebox.toggle()
//因为按钮上的文字图案会随着品牌内容的变化而变化
//判断品牌内容是否隐藏
if(hidebox.is(":hidden")){
//这里可以用空的removeClass(),表示把类属性全部情况清空
$("div div").removeClass()
$("div div").addClass("showmore")
$("div div a span").text("显示全部品牌")
//可以用索引,也可以用包含文字
$("li:contains('佳能')").removeClass()
$("li:eq(3)").removeClass()
$("li:eq(10)").removeClass()
}else {
$("div div").removeClass("showmore")
$("div div").addClass("showless")
$("div div a span").text("显示精选品牌")
$("li:eq(0)").addClass("promoted")
$("li:eq(3)").addClass("promoted")
$("li:eq(10)").addClass("promoted")
}
return false;
})
});
</script>
</head>
<body>
<div class="SubCategoryBox">
<ul>
<li><a href="#">佳能</a><i>(30440) </i></li>
<li><a href="#">索尼</a><i>(27220) </i></li>
<li><a href="#">三星</a><i>(20808) </i></li>
<li><a href="#">尼康</a><i>(17821) </i></li>
<li><a href="#">松下</a><i>(12289) </i></li>
<li><a href="#">卡西欧</a><i>(8242) </i></li>
<li><a href="#">富士</a><i>(14894) </i></li>
<li><a href="#">柯达</a><i>(9520) </i></li>
<li><a href="#">宾得</a><i>(2195) </i></li>
<li><a href="#">理光</a><i>(4114) </i></li>
<li><a href="#">奥林巴斯</a><i>(12205) </i></li>
<li><a href="#">明基</a><i>(1466) </i></li>
<li><a href="#">爱国者</a><i>(3091) </i></li>
<li><a href="#">其它品牌相机</a><i>(7275) </i></li>
</ul>
<div class="showmore">
<a href="more.html"><span>显示全部品牌</span></a>
</div>
</div>
</body>
6.5、事件 图片跟随
mousemove
鼠标移动事件,event会记录鼠标移动的每次坐标pageX、pageY
图片跟随鼠标动
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<style type="text/css">
body {
text-align: center;
}
#small {
margin-top: 150px;
}
#showBig {
position: absolute;
display: none;
}
</style>
<script type="text/javascript" src="script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
$("#small").bind("mouseenter mouseout mousemove",function (event) {
if(event.type == "mouseenter"){
$("#showBig").show()
}else if(event.type == "mouseout"){
$("#showBig").hide()
}else if(event.type == "mousemove"){
//mousemove 鼠标移动事件,event会记录鼠标移动的每次坐标pageX、pageY
$("#showBig").offset({
//+10 是因为如果图片紧跟着鼠标的话,当鼠标向右下角移动时,有一瞬间会点在大图片上
// 此时浏览器会认为离开了小图片,就触发mouseout事件,最后会导致大图片一闪一闪
top: event.pageY +10,
left: event.pageX +10
})
}
})
});
</script>
</head>
<body>
<img id="small" src="img/small.jpg" />
<div id="showBig">
<img src="img/big.jpg">
</div>
</body>
7、DOM 的增删改
内部插入: 就是让 a 变成括号内的 b 的子元素
括号内可以填放选择器
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
$("<h6>标题</h6>").appendTo($("#1"))
});
</script>
</head>
<body>
<div id="1">1234</div>
<span>FFFFF</span>
<div>abcd</div>
</body>
可以实现批量插入,同等级的兄弟元素
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
$("<h6>标题</h6>").insertAfter($("#1"))
});
</script>
</head>
<body>
<div id="1">1234</div>
<span>FFFFF</span>
<div>abcd</div>
</body>
a.replaceWith(b)
b 替换掉了所有的 a
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
$("div").replaceWith($("<h6>标题</h6>"))
});
</script>
</head>
<body>
<div id="1">1234</div>
<span>FFFFF</span>
<div>abcd</div>
</body>
清空内容只是清空前后标签里面的文本内容,并不会删除标签
8、CSS 样式操作
一般都是在CSS中将准备好的样式固定封装进指定class属性的某标签,比如:
<style type="text/css">
div.blackDiv{
border: 5px blue solid;
}
</style>
以下这种写法是规定哪些标签可以用这个样式,规定为类属性为.showmore并且有个a元素作为后代,并且a元素后面还有个后代是span元素
.showmore a span {
padding-left: 15px;
background: url(img/down.gif) no-repeat 0 0;
}
而addClass()等的方法是给给指定标签添加class属性,再给标签添加进同名属性之后,前面设定的CSS样式自然就安排进了这个标签了
$('#btn01').click(function(){
//addClass() - 向被选元素添加一个或多个类
//添加多个类属性,使用空格隔开
$divEle.addClass("redDiv blackDiv");
});
注意添加和删除 类属性的时候,双引号里面的属性不要小数点addClass("showmore")
console.log(pre)
该方法是向浏览器的调试控制台输出指定pre内容
offset()
返回在运行之后,浏览器页面下,该元素距离浏览器边框的距离,返回top和left
也可以进行赋值操作
offset({top:12,left:200})
9、jQuery 动画
因为以上的动画方法可以设置回调函数作为参数,所以简单演示动画一直动
//显示和隐藏每隔一秒就交替执行
var a = function(){
$("div").toggle(1000,a)
}
a(); //需要进行调用
以上动画方法也可以传入两个参数,第一个参数是动画执行的时长,第二个是回调的函数
fadeTo()
可以穿入三个参数,第一个是执行时长,第二个是透明度,第三个是回调函数
10、jQuery 事件操作
10.1、常用事件
$( function(){} )
的全写是$(document).ready(function(){})
$( function(){} );
和window.onload = function(){}
的区别?
- 在什么时候触发?
- jQuery 的页面加载完成之后是浏览器的内核解析完页面的标签创建好 DOM 对象之后就会马上执行
- 原生 js 的页面加载完成之后,除了要等浏览器内核解析完标签创建好 DOM 对象,还要等标签显示时需要的内容加载 完成
- 触发的顺序?
- jQuery 页面加载完成之后先执行
- 原生 js 的页面加载完成之后
- 当有多个页面加载的操作时
- jQuery 的页面加载完成之后是将全部语句中包含的 function 函数,依次顺序全部执行
- 原生 js 的页面加载完成之后,只会执行最后一次语句中包含的赋值函数
以下在文档中都有详细介绍
绑定单击事件,就是在里面传入函数
$("h5").click(function(){alert("h5的单击事件")})
触发单击事件,就是不向括号里面传入内容,实现触发
实现当点击button按钮的时候,触发h5的单击事件
$("button").click(function(){$("h5").click()})
bind()
绑定多个事件
unbind()
不传入参数,就是解除所有的绑定
多个解绑用空格隔开
live('click',function(){})
可以实现动态绑定
原有的标签绑定了事件,在该操作之后新创建的同名标签并不会附带事件效果,但使用live()
绑定事件就可以解决这个问题
//当给定的标签里面有一个 h5 标签时候,编写绑定单击事件代码
$("h5").click(function(){alert("h5单击事件")})
//在此之后在编写创建一个 h5 标签时,该标签不附带单击事件效果
//这个情况在【动态添加删除】练习里面给delete按钮添加单击事件时候提到过,因为代码是自上而下执行的
$("<h5>动态添加的新的 h5 标签</h5>")
10.2、事件的冒泡
什么是事件的冒泡?
事件的冒泡是指,父子元素同时监听同一个事件。当触发子元素的事件的时候,同一个事件也被传递到了父元素的事件里去响应
比如父子都各自绑定了单击事件,当点击子元素时候,父元素的单击事件也响应了
那么如何阻止事件冒泡呢?
在子元素事件函数体内,return false; 可以阻止事件的冒泡传递
10.3、javaScript 事件对象
事件对象
是封装有触发的事件信息的一个 javascript 对象
我们重点关心的是怎么拿到这个 javascript 的事件对象,以及使用
如何获取呢 javascript 事件对象呢?
在给元素绑定事件的时候,在事件的 function( event ) 参数列表中添加一个参数,这个参数名,我们习惯取名为 event
这个 event 就是 javascript 传递参事件处理函数的事件对象
示例:
- 原生 javascript 获取 事件对象
window.onload = function(){
document.getElementById("areaDiv").onclick = function(event){
console.log(event);
};
}
- jQuery 代码获取 事件对象
$(function(){
$("#areaDiv").click(function(event){
console.log(event);
})
})
- 使用 bind 同时对多个事件绑定同一个函数。怎么获取当前操作是什么事件
$(function(){
$("#areaDiv").bind('click mouseenter',function (event) {
// console.log(event) 打印出来可以发现里面包含了事件类型
if(event.type == "click"){
console.log("单击事件");
}else(event.type == "mouseenter") {
console.log("鼠标移入事件");
}
})
})