今日任务
使用JQuery完成页面定时弹出广告
定时器:
setInterval clearInterval
setTimeout clearTimeout
显示: img.style.display = "block"
隐藏: img.style.display = "none"
img 对象
style属性: style对象
使用JQuery完成表格的隔行换色
获得所有的行
table.rows[ ]
修改行的颜色
row.bgColor ="red"
row.style.backgroundColor = "black"
row.style.background = "red"
"background-color:red"
"background:red"
使用JQuery完成复选框的全选效果
checked属性
如何获取所有复选框:
document.getElementsByName get Elements By Name 数据库里面
使用JQuery完成省市联动效果
JS中的数组: ["城市"]
new Array()
DOM树操作:
创建元素节点: document.createElement
创建文本节点: document.createTextNode
添加节点: appendChild
使用JQuery完成下列列表左右选择
select下拉列表
multiple 允许多选
ondblclick : 双击事件
for循环遍历,一边遍历一边移除出现的问题
使用JQuery完成表单的校验(扩展)
事件:
获得焦点事件: onfocus
失去焦点事件: onblur
按键抬起事件: onkeyup
鼠标移入: onmouseenter
鼠标移出: onmouseout
JS引入外部文件 : script
今日目标:
掌握JQuery的基本使用
掌握JQuery的基本选择器,层次选择器
会使用JQuery完成DOM的基本操作
1. 使用JQuery完成页面定时弹出广告
1.1 需求分析:
当用户打开界面,3秒钟之后弹出广告,这个广告显示5秒钟,隐藏广告
1.2 技术分析
定时器: setTimeout
显示和隐藏: style.display = "block/none"
什么JQuery:
jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(*或JavaScript框架*)。jQuery设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作、事件处理、动画设计和Ajax交互。
jQuery的核心特性可以总结为:具有独特的链式语法和短小清晰的多功能接口;具有高效灵活的css选择器,并且可对CSS选择器进行扩展;拥有便捷的插件扩展机制和丰富的插件。jQuery兼容各种主流浏览器,如IE 6.0+、FF 1.5+、Safari 2.0+、Opera 9.0+等
JQuery的作用:
1. 写更少的代码,做更多的事情: write Less ,Do more
2. 将我们页面的JS代码和HTML页面代码进行分离
为什么学习JQuery:
提高我们的工作效率
JQ的入门
<script> //js文档加载完成的事件 window.onload = function(){ alert("window.onload 111"); } window.onload = function(){ alert("window.onload 222"); } /*文档加载完成的事件*/ jQuery(document).ready(function(){ alert("jQuery(document).ready(function()"); }); /* jQuery 简写成 $ */ $(document).ready(function(){ alert("$(document).ready(function()"); }); /* 最简单的写法 */ $(function(){ alert("$(function(){"); }); </script>
【JQ中根据ID查找元素】
全都是根据选择器去找的
#ID{}
.类名{}
$("#ID的名称")
【JQ和JS之间的转换】
- JQ对象,只能调用JQ的属性和方法
- JS对象 只能调用JS的属性和方法
function changeJS(){ var div = document.getElementById("div1"); // div.innerHTML = "JS成功修改了内容" //将JS对象转成JQ对象 $(div).html("转成JQ对象来修改内容") } $(function(){ //给按钮绑定事件 $("#btn2").click(function(){ //找到div1 // $("#div1").html("JQ方式成功修改了内容"); //将JQ对象转成JS对象来调用 var $div = $("#div1"); // var jsDiv = $div.get(0); var jsDiv = $div[0]; jsDiv.innerHTML="jq转成JS对象成功"; }); });
JQ的开发步骤: (将我们页面的JS代码和HTML页面代码进行分离)
1. 导入JQ相关的文件
2. 文档加载完成事件: $(function) : 页面初始化的操作: 绑定事件, 启动页面定时器
3. 确定相关操作的事件
4. 事件触发函数
5. 函数里面再去操作相关的元素
显示和隐藏 img.style.display
【JQ中的动画效果】
javascript
show()
hide()
slideUp
slideDown
fadeIn
fadeOut
animate : 自定义动画
1.3 步骤分析:
1. 导入JQ的文件
2. 编写JQ的文档加载事件
3. 启动定时器 setTimeout("",3000);
4. 编写显示广告的函数
5. 在显示广告里面再启动一个定时器
6. 编写隐藏广告的函数
1.4 代码实现
<script> //显示广告 function showAd(){ $("#img1").slideDown(2000); setTimeout("hideAd()",3000); } //隐藏广告 function hideAd(){ $("#img1").slideUp(2000); } $(function(){ setTimeout("showAd()",3000); }); </script>
JQuery中的选择器
让我们能够更加精确找到我们要操作的元素
基本选择器
- ID选择器 : #ID的名称
- 类选择器: 以 . 开头 .类名
- 元素选择器: 标签的名称
- 通配符选择器: *
- 选择器,选择器: 选择器1,选择器2
基本选择器的案例
javascript
<!--
- ID选择器 : #ID的名称
- 类选择器: 以 . 开头 .类名
- 元素选择器: 标签的名称
- 通配符选择器: *
- 选择器,选择器: 选择器1,选择器2
-->
<script> //文档加载事件,页面初始化的操作 $(function(){ //初始化操作: 给按钮绑定事件 $("#btn1").click(function(){ $("#two").css("background-color","palegreen"); }); //找出mini类的所有元素 $("#btn2").click(function(){ $(".mini").css("background-color","palegreen"); }); $("#btn3").click(function(){ $("div").css("background-color","palegreen"); }); $("#btn4").click(function(){ $("*").css("background-color","palegreen"); }); /*选择器分组*/ //找出mini类 和 span元素 $("#btn5").click(function(){ $(".mini,span").css("background-color","palegreen"); }); }); </script>
JQ中的层级选择器
- 子元素选择器: 选择器1 > 选择器2
- 后代选择器: 选择器1 儿孙
- 相邻兄弟选择器 : 选择器1 + 选择器2 : 找出紧挨着的一个弟弟
- 找出所有弟弟: 选择器1~ 选择器2 : 找出所有的弟弟
<script> //文档加载事件,页面初始化的操作 $(function(){ //初始化操作: 给按钮绑定事件 //找出body下面的子div $("#btn1").click(function(){ $("body > div").css("background-color","palegreen"); }); //找出body下面的所有div $("#btn2").click(function(){ $("body div").css("background-color","palegreen"); }); $("#btn3").click(function(){ $("#one+div").css("background-color","palegreen"); }); $("#btn4").click(function(){ $("#two~div").css("background-color","palegreen"); }); }); </script>
JQ中的基本过滤器
<script> $(function(){ /<script> //文档加载事件,页面初始化的操作 $(function(){ //初始化操作: 给按钮绑定事件 //过滤出所有div中第一个元素 $("#btn1").click(function(){ $("div:first").css("background-color","palegreen"); }); //过滤出所有div中偶数位的div $("#btn2").click(function(){ $("div:even").css("background-color","palegreen"); }); $("#btn3").click(function(){ $("div:odd").css("background-color","palegreen"); }); $("#btn4").click(function(){ $("div:gt(2)").css("background-color","palegreen"); }); }); </script>
JQ中的属性选择器
$(function(){ //找到有name属性的input $("#btn1").click(function(){ $("input[name]").attr("checked",true); }); $("#btn2").click(function(){ $("input[name='accept']").attr("checked",true); }); $("#btn3").click(function(){ $("input[name='newsletter'][value='Hot Fuzz']").attr("checked",true); }); });
JQ中的表单过滤器
<script> //1.文档加载事件 $(function(){ $(":text").css("background-color","pink"); }); </script>
上午的内容回顾:
什么是JQ: write less , do more: 写更少的代码,做更多的事
javascript函数库
1.11版本
定时器:
动画效果:
show : 显示
hide : 隐藏
slideDown:
slideUp: 向上滑动
fadeIn
fadeOut
JQ选择器:
基本选择器:
ID选择器: #ID的名字
类选择器: .类名
元素选择器: 标签名称
通配符选择器: *
选择器分组: 选择器1,选择器2
层级选择器:
后代选择器: 选择器1 儿孙
子元素选择器: 选择器1 > 儿子
相邻兄弟选择器: 选择器1 + 选择器2 找出紧挨着它的弟弟
所有弟弟选择器: 选择器1~选择器2 找出所有弟弟
基本过滤器:
选择器:first : 找出的是第一个
:last :找出的是最后一个
:even 找出索引为偶数
:odd 找出奇数索引
:gt(index) : 大于索引
:lt(index) 小于
:eq(index) 等于
属性选择器:
选择器[href] : 单个属性
选择器[href][title] : 多个属性
选择器[href][title='test'] : 多个属性,包含值
表单过滤器:
:input 找出所有输入项: input textarea select
:text
:password
表单对象属性:
找出select中被选中的那一项:
option:selected
JQ的开发步骤:
1. 导入JQ相关的包
2. 文档加载文成的事件: 页面初始化: 绑定事件, 启动定时器
3. 确定事件
4. 实现事件索要触发的函数
5. 函数里面再去操作我们要操作的元素
使用JQ完成表格的隔行换色
需求分析:
在我们的实际开发过程中,我们的表格如果所有的行都是一样的话,很容易看花眼,所以我们需要让我们的表格隔行换色
技术分析:
获取所有行 table.rows
遍历所有行
根据行号去修改每一行的背景颜色: bgColor
style.backgroundColor = "red"
步骤分析:
1. 导入JQ的包
2. 文档加载完成函数: 页面初始化
3. 获得所有的行 : 元素选择器
4. 根据行号去修改颜色
代码实现:
1 $(function(){ 2 //获得所有的行 : 元素选择器 3 $("tbody > tr:even").css("background-color","#CCCCCC"); 4 //修改奇数行 5 $("tbody > tr:odd").css("background-color","#FFF38F"); 6 // $("tbody > tr").css("background-color","#FFF38F"); 7 8 9 });
使用JQuery完成表单的全选全不选功能
需求分析
在我们对表格处理的时,有些情况下,我们需要对表格进行批量处理,
技术分析:
代码实现:
使用JQ完成省市联动效果
需求分析:
在我们的注册表单中,通常我们需要知道用户的籍贯,需要一个给用选择的项,当用户选中了省份之后,列出省下面所有的城市
技术分析:
1. 准备工作 : 城市信息的数据
2. 添加节点 : appendChild (JS)
1. append : 添加子元素到末尾
2. appendTo : 给自己找一个爹,将自己添加到别人家里
3. prepend : 在子元素前面添加
4. after : 在自己的后面添加一个兄弟
3. 遍历的操作:
步骤分析:
1. 导入JQ的文件
2. 文档加载事件:页面初始化
3. 进一步确定事件: change事件
4. 函数: 得到当前选中省份
5. 得到城市, 遍历城市数据
6. 将遍历出来的城市添加到城市的select中
代码实现:
$(function(){ $("#province").change(function(){ // alert(this.value); //得到城市信息 var cities = provinces[this.value]; //清空城市select中的option /*var $city = $("#city"); //将JQ对象转成JS对象 var citySelect = $city.get(0) citySelect.options.length = 0;*/ $("#city").empty(); //采用JQ的方式清空 //遍历城市数据 $(cities).each(function(i,n){ $("#city").append("<option>"+n+"</option>"); }); }); });
使用JQ完成下拉列表左右选择
需求分析
我们的商品通常包含已经有了的, 还有没有的,现在我们需要有一个页面用于动态编辑这些商品
技术分析
步骤分析
1. 导入JQ的文件
2. 文档加载函数 :页面初始化
3.确定事件 : 点击事件 onclick
4. 事件触发函数
1. 移动被选中的那一项到右边
代码实现
<script type="text/javascript" src="../js/jquery-1.11.0.js" ></script> <script> $(function(){ $("#a1").click(function(){ //找到被选中的那一项 //将被选中项添加到右边 $("#rightSelect").append($("#leftSelect option:selected")); }); //将左边所有商品移动到右边 $("#a2").click(function(){ $("#rightSelect").append($("#leftSelect option")); }); }); </script
今天内容总结:
定时器
动画效果: show hide slideDown slideUp fadeIn fadeOut animate
基本选择器:
ID选择器: #ID名称
类选择器: .类名
元素选择器: 元素/标签名称
通配符选择器: * 找出所有页面元素 包含页面上所有的标签
选择器分组 : 选择器1, 选择器2 [选择器1,选择器2]
层级选择器:
后代选择器: 选择器1 选择器2 找出所有的后代,儿子孙子曾孙
子元素选择器: 选择器1 >选择器2 找出所有儿子
相邻兄弟选择器: 选择器1+选择器2 : 找出紧挨着自己那个弟弟
兄弟选择器 : 选择器1~选择器2 : 找出所有的弟弟
属性选择器:
选择器[属性名称]
选择器[属性名称][属性名名]
选择器[属性名称='属性值'][属性名称='属性值'][属性名称='属性值']
表单选择器:
:input 找出所有的输入项 : 不单单找出input textarea select
:text 找出type类型为 text
:password
基本过滤器:
:even
:odd
:gt
:lt
:eq
:first
:last
表单对象属性:
:selected
:checked
$(function) : 文档加载完成的事件
css() : 修改css样式
prop() : 修改属性/ 获取属性
html() : 修改innerHTML
append : 给自己添加子节点
appendTo : 将自己添加到别人家,给自己找一个爹
prepend : 在自己最前面添加子节点
after : 在自己后面添加一个兄弟
empty : 清空所有子节点
$(cities).each(function(i,n){
})
$.each(arr,function(i,n){
});
了解, 熟悉, 熟练, 精通
经过一个项目,将所有学过串起来
使用JQ完成表单的校验(扩展)
需求分析
在用户提交表单的时候, 我们最好是能够在用户数据提交给服务器之前去做一次校验,防止服务器压力过大,并且需要给用户一个友好提示
技术分析
- trigger
- triggerHandler
- is()
步骤分析
1. 首先给必填项,添加尾部添加一个小红点
2. 获取用户输入的信息,做相应的校验
3. 事件: 获得焦点, 失去焦点, 按键抬起
4. 表单提交的事件
代码实现
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="../css/style.css" /> <title></title> <!-- 1. 首先给必填项,添加尾部添加一个小红点 2. 获取用户输入的信息,做相应的校验 3. 事件: 获得焦点, 失去焦点, 按键抬起 4. 表单提交的事件 Jq的方式来实现: 1. 导入JQ的文件 2. 文档加载事件: 在必填项后天加一个小红点 3. 表单校验确定事件: blur focus keyup 4. 提交表单 submit --> <script type="text/javascript" src="../js/jquery-1.11.0.js" ></script> <script> $(function(){ //默认做一些页面初始化 //动态在必填项后面添加小红点 $(".bitian").after("<font class='high'>*</font>"); //给必填项绑定事件 $(".bitian").blur(function(){ //首先获取用户当前输入的值 var value = this.value; //123 //清空上一次提示的信息 $(this).parent().find(".formtips").remove(); //判断当前的值是哪一项输入的值 if($(this).is("#username")){ //判断是否是用户名输入项 if(value.length < 6){ $(this).parent().append("<span class='formtips onError'>用户名太短了</span>"); }else{ $(this).parent().append("<span class='formtips onSuccess'>用户名够用</span>"); } } if($(this).is("#password")){ //判断是否是密码输入项 if(value.length < 6){ $(this).parent().append("<span class='formtips onError'>,密码太短了</span>"); }else{ $(this).parent().append("<span class='formtips onSuccess'>密码够用</span>"); } } }).focus(function(){ $(this).triggerHandler("blur"); }).keyup(function(){ $(this).triggerHandler("blur"); }) //给表单提交绑定事件 $("form").submit(function(){ //触发所有必填项的校验 $(".bitian").trigger("focus"); //找到错误信息的个数 if($(".onError").length > 0){ return false; } return true; }); }); /* $(function(){ // 在所有必填项后天加一个小红点 * $(".bitian").after("<font class='high'>*</font>"); //事件绑定 $(".bitian").blur(function(){ // var value = this.value; var value = $(this).val(); //清空当前必填项后面的span // $(".formtips").remove(); $(this).parent().find(".formtips").remove(); //获得当前事件是谁的 if($(this).is("#username")){ //校验用户名 if(value.length < 6){ $(this).parent().append("<span class='formtips onError'>用户名太短了</span>"); }else{ $(this).parent().append("<span class='formtips onSuccess'>用户名够用</span>"); } } if($(this).is("#password")){ //校验密码 if(value.length < 3){ $(this).parent().append("<span class='formtips onError'>密码太短了</span>"); }else{ $(this).parent().append("<span class='formtips onSuccess'>密码够用</span>"); } } }).focus(function(){ $(this).triggerHandler("blur"); }).keyup(function(){ $(this).triggerHandler("blur"); }); // $(".bitian").blur(function(){}).focus(function(){}).keyup(function(){}) //给表单绑定提交事件 $("form").submit(function(){ //触发必填项的校验逻辑 $(".bitian").trigger("focus"); var length = $(".onError").length if(length > 0){ return false; } return true; }); });*/ </script> </head> <body> <form action="../index.html"> <div> 用户名:<input type="text" class="bitian" id="username" /> </div> <div> 密码:<input type="password" class="bitian" id="password" /> </div> <div> 手机号:<input type="tel" /> </div> <div> <input type="submit" /> </div> </form> </body> </html>