三、(1)jQuery入门及选择器
jQuery入门及选择器
jQuery简介(了解)
什么是jQuery
jQuery是一个开源的产品,任何人都可以自由的使用,jQuery强调的理念是写的少,做的多(write less, do more),其独特的选择器、链式DOM操作方式、事件绑定机制、出色的浏览器兼容性、封装完善的Ajax都是其它JavaScript库望尘莫及的,是继prototype之后又一个优秀的Javascript框架 (框架指已经封装好的,据有一定结构和功能的代码)。
扩展知识:库,包:封装了很多预定义的对象和实用的函数。
JavaScript框架
- 1) Prototype:侧重功能扩展,被jQuery干掉了。
- 2) Yui:Yahoo user interface (yahoo 用户接口)实现页面布局,提供了很多组件。
- 3) Dojo:功能多,企业级,得到了IBM、SUN和BEA等一些大公司的支持。学习曲线陡,文档不齐全,API不稳定,每次升级都可能导致已有的程序失效。
- 4) ExtJs:2007年出来的高级、有许多绚丽效果的框架 (例如:多个div可以拖拽实现位置切换)臃肿庞大,性能一般,兼容性不及jQuery。
- 5) MooTools (面向对象)
- 6) jQuery 。(写得更少,做得更多,兼容性好)。
为什么要学习和使用jQuery
在实际项目中,我们很多时候需要处理后端返回来的数据,把数据渲染在页面。返回的数据可能每次的数据条数都不一样,每条数据的字段个数也可能不一样,我们展示数据的时候,就需要根据数据实际情况动态的在页面上增加,删除,修改我们的html节点或者css样式,为了增强用户体验,有时候还需要做动画效果,课件js操作文档的的时候非常多。原生的js操作文档会有很多兼容性问题需要我们去处理,使用jQuery可以避免这些问题。
JQuery的特点:
- 1、开源产品、语义易懂、丰富文档。(备注:学习jQuery的主要方法就是查看文档)
- 2、write less, do more。
- 3、jQuery 是一个轻量级的脚本,其代码非常小巧。开发版278K,压缩版94K。
- 4、jQuery 支持 CSS1~CSS3 定义的属性和选择器
- 5、jQuery 是跨浏览器的,它支持的浏览器包括 IE 6.0+、FF 1.5+、Safari 2.0+和 Opera 9.0+、Chrome。 兼容性好。
- 6、插件丰富,除了 jQuery 自身带有的一些特效外,可以通过插件实现更多功能。
JQuery的宗旨: write less,do more(写更少的代码,实现更多的功能)。
jQuery被用在哪里
- 处理html 文档 动态的增加、删除html元素
- Events 各种鼠标、键盘、浏览器事件
- 实现动画效果 展开和折叠、隐藏和显示、淡入和淡出等。
- 提供AJAX交互 异步加载,局部刷新等,ajax后面有门课程单独讲解。
扩展知识: JQuery可以用到任何的网站中.移动端现在一般用zepto.js 这个库跟jquery写法非常相似,所以学好了jquery,也相当于学会了zepto.js。
jQuery版本划分
1.x系列 支持ie6~8,兼容性比较好
2.x系列 不支持IE6~8,体积小
3.x系列 仅支持ie9以上的浏览器,目标是更加快速。
实际运用:
1.学校,医院,政府-->使用1.x版本
2.其他只关注炫酷效果的网站,可以使用2.x或3.x版本
jQuery入门体验
1、黑白交替效果:
<body> <input type="button" value="开灯" id="on"/> <input type="button" value="关灯" id="off"/> <script> //黑白交替效果 $(function () { $("#on").click(function () { $("body").css("background","white"); }); $("#off").click(function () { $("body").css("background","black"); }); });</script> </body>
2、div盒子 5秒内宽度变为1000px (注意:属性和值之间是冒号 : 而不是逗号, 多个值之间才是 ,)
<body> <div id="box"> 占位符占位符占位符占位符占位符占位符占位符占位符占位符 占位符占位符占位符占位符 </div>//2、div盒子 5秒内宽度变为1000px(注意:属性和值之间是冒号 : 而不是逗号, 多个值之间才是。 $(function () { $("#box").animate({"width":"100%"},10000); }); </script> </body>
jQuery中的 $ 符号
在jQuery中,$是jQuery的别名,可以把$看着jQuery的快捷方式,所有使用$的地方也都可以使用jQuery来替换,如$('#msg')等同于jQuery('#msg') 的写法。$ 符号具体用在以下几个地方:
- 1、$(“字符串”) 获取页面中元素。例如:$(“#box1”), $(“.box1”)等。
- 2、$.ajax() 将$作为函数对象,使用该对象上面的方法。
- 3、$(function(){}) 注册页面加载完毕事件。等效于window.onload
- 4、$(domObject); dom对象转为jquery对象。举例:$(window)
- 5、$(“html代码”) 创建html代码的元素对象。
使用JQuery的大前提
1、使用jQuery之前必须先引入jQuery的js文件,你的代码要写在引入jQuery之后.
2、查找元素要保证你的元素的确是存在的。
3、查找元素要保证你的获取的代码是在元素已加载后执行。
注意:很多初学者,发现通过jQuery的方法无法获取元素。其实最普遍的问题是因为元素为未加载。
解决办法:
1.获取代码写在body元素内容的最后。
2.通过jQuery 页面加载事件。
$(function(){ //页面加载完毕,获取页面元素。 alert("hello jQuery") ; }); //下面两个个方法跟上面这个方法是同一个意思 $(document).ready(function(){ //页面加载完毕,获取页面元素。 alert("hello jquery") ; }); jQuery(function(){ //页面加载完毕,获取页面元素。 alert("hello jquery") ; });
选择器
什么是选择器
概念:根据标签的属性id,class的值或者是标签的名字查找文档元素的功能称之为选择器。
选择器是jquery的根基,在jquery中,对事件的处理,遍历DOM,ajax操作等都依赖于选择器,熟练使用选择器,不仅能简化代码,而且可以达到事半功倍的效果。
jQuery选择器可简单分为基本选择器、层次选择器、过滤选择器、表单选择器。
为什么要使用选择器
通过Javascript改变html中元素效果之前首先要找到元素,采用jQuery选择器寻找元素简单快捷。
原生javascript代码:document.getElementById(‘myId’);
jQuery代码:$(‘#myId’)
例如:改变页面中所有的p标签的背景颜色为红色.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!-- 引入jQuery库--> <script src="js/jquery.js"></script> </head> <body> <p>自在飞花轻似梦</p> <p>自在飞花轻似梦</p> <p>无边丝雨细如愁</p> <p>无边丝雨细如愁</p> <script> //3. 改变页面中所有的p标签的背景颜色为红色. //方法一:原生js var ps = document.getElementsByTagName("p"); for (var i=0;i<ps.length;i++){ ps[i].style.background="#f00"; } //方法二:jQuery $("p").css("background","#f00"); </script> </body> </html>
选择器分类
选择器的设计思想源于CSS,jQuery的选择器借鉴了CSS选择符号的语法规范.
不同的选择符号作用于不同的html元素.
jQuery借鉴了css选择器的用法。以下截图是jQuery全部的选择器:
1. 基本选择器(重点)
根据标签名字,css类名或者id的名字查找符合条件的元素。
语法:
1. #id id选择器
2. Element 元素选择器
3. .class class选择器
4. * 通配符选择器
5. selector1, selector2, selectorN 联合选择器,多个选择器使用,隔开
练习:给页面所有的p标签加上背景颜色。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/jquery.js"></script> </head> <body> <div id="title"> <h1 id="t1">标题一</h1> <h2>标题一</h2> <p>占位符占位符</p> </div> <div class="box"><p>占位符占位符</p></div> <script> //标签选择器 $("p").css("background","#f00"); //类选择器 $(".box").css("background","#f0f"); //id选择器 $("#t1").css("background","#00f"); //组合选择器 $("p,#t1").css("fontSize","50px"); </script> </body> </html>
2. 层级选择器
以一个元素为参照,查找其子元素或者兄弟元素.(兼容性非常好,IE6下也兼容)。
语法:
. ancestor descendant(后代选择器)
在给定的祖先元素(ancestor)下匹配所有的后代元素(descendant).返回所有的后代元素.
7. parent > child(父子选择器)
在给定的父元素(parent)下匹配所有直接子元素(child),返回所有的直接子元素.
8. prev + next(相邻选择器)
匹配紧接在 所有prev 元素后的 next(下一个) 元素,返回紧接的下一个元素.
9. prev ~ siblings 等同于nextAll()(兄弟选择器)
匹配 prev 元素之后的所有 siblings 元素.返回之后的所有兄弟节点.
3. 过滤选择器
1.基本过滤选择器
语法:
10. :first
用法: $(”tr:first”) ; 单个元素的组成的集合。
匹配找到的第一个元素
11. :last
匹配找到的最后一个元素。
12. :not(selector)
去除所有与给定选择器匹配的元素,not后面括号里面是一个选择的节点。
13. :even
匹配所有索引值为偶数的元素,从 0 开始计数。
14. :odd
匹配所有索引值为奇数的元素,从 0 开始计数。
15. :eq(index)
匹配一个给定索引值的元素,从 0 开始计数。
16. :gt(index)
匹配所有大于给定索引值的元素,从 0 开始计数。
17. :lt(index)
匹配所有小于给定索引值的元素,从 0 开始计数。
18. :header
匹配如 h1, h2, h3之类的标题元素。
$(‘:header’)获取所有的h对象.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/jquery.js"></script> <style> #box{ width: 200px; height: 100px; background:red; } </style> </head> <body> <h1>标题1</h1> <h2>标题2</h2> <h3>标题3</h3> <div>盒子1</div> <div>盒子2</div> <div>盒子3</div> <div>盒子4</div> <div>盒子5</div> <ul> <li>列表1</li> <li>列表2</li> <li>列表3</li> <li>列表4</li> <li>列表5</li> </ul> <div id="box"></div> </body> <script> //first 匹配第一个元素 $("div:first").css("background", "#0b0"); //last 匹配最后一个元素 $("div:last").css("background", "#00f"); //even 匹配索引是偶数的元素 $("ul li:even").css("background", "#f00"); //odd 匹配索引是奇数的元素 $("ul li:odd").css("background", "#0f0"); //gt(index) 匹配索引大于index的元素 $("div:gt(2)").css("background", "#0f0"); //lt(index) 匹配索引小于index的元素 $("div:lt(3)").css("background", "#ddd"); //eq(index) 匹配索引等于index的元素 $("div:eq(3)").css("background", "#00f"); //header 获取所有对象 $(":header").css("background","red"); //animated 匹配所有在执行动画的元素 $("#box").click(function () { $(this).animate({"width":"1000px"},1000); $("div:animated").css("background","green"); }); </script> </html>
2.内容过滤选择器
内容过滤选择器的过滤规则主要体现在它所包含的子元素和文本上。
语法:
19. :contains(text)
用法: $(”div:contains(’John’)”)
匹配包含给定文本的元素
20. :empty
用法: $(”td:empty”)
匹配所有不包含子元素或者文本的空元素
21. :has(selector)
用法: $(”div:has(p)”).addClass(”test”)
匹配含有选择器所匹配的元素的元素
22. :parent
用法: $(”td:parent”)
匹配含有子元素或者文本的元素 (空白的文本也算是有子元素)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/jquery.js"></script> </head> <body> <div> <p>这是一个盒子</p> <p>这是一个标签</p> <p>今天在下雨</p> <span>000</span> </div> <script> //含有给定文本的元素 $("p:contains(下雨)").css("background","red"); //是否包含某个元素或文本的空元素 $("span:empty").css("background","red"); //匹配包含某标签的元素 $("div:has(p)").css("background","blue"); //包含有子元素或文本的元素 $("div:parent").css("background","#0a0"); </script> </body> </html><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/jquery.js"></script> </head> <body> <div> <p>这是一个盒子</p> <p>这是一个标签</p> <p>今天在下雨</p> <span>000</span> </div> <script> //含有给定文本的元素 $("p:contains(下雨)").css("background","red"); //是否包含某个元素或文本的空元素 $("span:empty").css("background","red"); //匹配包含某标签的元素 $("div:has(p)").css("background","blue"); //包含有子元素或文本的元素 $("div:parent").css("background","#0a0"); </script> </body> </html>
3.可见性过滤选择器
查找隐藏或者显示的标签元素。
23. :hidden
用法: $(”input:hidden”)
说明: 匹配所有的不可见元素
24. :visible
用法: $(”input:visible”)
匹配所有的可见元素
4.属性过滤选择器
代码:
<style type="text/css"> /*高亮显示*/ .highlight{ background-color: gray } </style>
代码:
<body> <div> <p>Hello</p> </div> <div id="test">ID为test的DIV</div> <input type="checkbox" id="s1" name="football" value="足球" />足球 <input type="checkbox" name="volleyball" value="排球" />排球 <input type="checkbox" id="s3" name="basketball" value="篮球" />篮球 <input type="checkbox" id="s4" name="other" value="其他" />其他 </body>
1. [attribute]用法
定义:匹配包含给定属性的元素
代码:
$("div[id]").addClass("highlight"); //查找所有含有ID属性的div元素
2. [attribute=value]用法
定义:匹配给定的属性是某个特定值的元素
代码:
$("input[name='basketball']").attr("checked",true); //name属性值为basketball的input元素选中
3. [attribute!=value]用法
定义:匹配给定的属性是不包含某个特定值的元素
代码:
$("input[name!='basketball']").attr("checked",true); //name属性值不为basketball的input元素选中 //此选择器等价于:not([attr=value])要匹配含有特定属性但不等于特定值的元素,使用[attr]:not([attr=value]) $("input:not(input[name='basketball'])").attr("checked",true);
4. [attribute^=value]用法
定义:匹配给定的属性是以某些值开始的元素
代码:
$("input[name^='foot']").attr("checked",true); //查找所有 name 以 'foot' 开始的 input 元素
5. [attribute$=value]用法
定义:匹配给定的属性是以某些值结尾的元素
代码:
$("input[name$='ball']").attr("checked",true); //查找所有 name 以 'ball' 结尾的 input 元素
6. [attribute*=value]用法
定义:匹配给定的属性是以包含某些值的元素
代码:
$("input[name*='sket']").attr("checked",true); //查找所有 name 包含 'sket' 的 input 元素
7. [selector1][selector2][selectorN]用法
定义:复合属性选择器,需要同时满足多个条件时使用
代码:
//找到所有含有 id属性,并且它的 name属性是以 ball结尾的 $("input[id][name$='ball']").attr("checked",true);
5. 子元素过滤选择器
这里值得一提的是:nth-child(),这个选择器的详细功能如下:
- 1、nth-child(even) 能选取每个父元素下的索引值是偶数的元素
- 2、nth-child(odd) 能选取每个父元素下的索引值是奇数的元素
- 3、nth-child(2) 能选取每个父元素下的索引值等于2的元素
- 4、nth-child(3n) 能选取每个父元素下的索引值等于3的倍数的元素,n从0开始
- 5、nth-child(3n+1) 能选取每个父元素下的索引值等于 (3n+1) 的的元素,n从0开始
- 6、特别注意系数为负数的情况:nth-child(-3n+8). 选择的包括第8 、第5、第2 个子元素,当3=3的时候 ,-3*3+8=-1,就结束选择了。
6. 表单对象属性过滤选择器
根据表单对象的属性操作查找符合条件的表单元素对象.
25. :enabled和:disabled
匹配所有可用和不可用的表单元素对象
26. :checked
匹配所有选中的被选中元素(复选框、单选框等,不包括select中的option)
27. :selected
匹配下拉列表中所有选中的option元素
表单选择器
课堂练习
改变 id 为 one 的元素的背景色为 #0000FF
改变 class 为 mini 的所有元素的背景色为 #FF0033
改变元素名为 <div> 的所有元素的背景色为 #00FFFF
改变所有元素的背景色为 #00FF33
改变所有的<span>元素和 id 为 two 的元素的背景色为 #3399FF
改变 <body> 内所有 <div> 的背景色为 #0000FF
改变 <body> 内子 <div> 的背景色为 #FF0033
改变 id 为 one 的下一个 <div> 的背景色为 #0000FF
改变 id 为 two 的元素后面的所有兄弟<div>的元素的背景色为 # #0000FF
改变 id 为 two 的元素所有 <div> 兄弟元素的背景色为 #0000FF
改变第一个 div 元素的背景色为 #0000FF
改变最后一个 div 元素的背景色为 #0000FF
改变class不为 one 的所有 div 元素的背景色为 #0000FF
改变索引值为偶数的 div 元素的背景色为 #0000FF
改变索引值为奇数的 div 元素的背景色为 #0000FF
改变索引值为大于 3 的 div 元素的背景色为 #0000FF
改变索引值为等于 3 的 div 元素的背景色为 #0000FF
改变索引值为小于 3 的 div 元素的背景色为 #0000FF
改变所有的标题元素的背景色为 #0000FF
改变当前正在执行动画的所有元素的背景色为 #0000FF
改变含有文本 ‘di’ 的 div 元素的背景色为 #0000FF
改变不包含子元素(或者文本元素) 的 div 空元素的背景色为 #0000FF
改变含有 class 为 mini 元素的 div 元素的背景色为 #0000FF
改变含有子元素(或者文本元素)的div元素的背景色为 #0000FF
改变不含有文本 di; 的 div 元素的背景色
改变所有可见的div元素的背景色为 #0000FF
选取所有不可见的元素, 利用 jQuery 中的 show() 方法将它们显示出来, 并设置其背景色为 #0000FF
CSS样式操作方法(重点)
CSS 行内样式操作
css()方法用于获取、设置元素的一个或多个属性。方法如下:$(selector).css();
例:
$("p").css("color","red");//该示例用于设置元素的颜色属性为红色; $("p").css("color");//该示例用于获得元素的color样式值; //该示例用于设置元素的多个样式。 $("p").css({"font-size":"30px","backgroundColor":"#888888"});
注意:jQuery中写css的时候。
- 1、如果值是数字,自动转为像素,比如设置盒子的宽度和高度等。
- 2、css()方法中,如果属性中带有中杠 “-”,比如font-size,background-color,设置这些属性的时候,如果不带引号,就要采用驼峰式写法。
例如:
$("li").css({"font-size":"30px","background-color":"red"});
$("li").css({fontSize:"30px",backgroundColor:"red"});
CSS类样式的操作
添加类名:addClass()方法,使用该方法对目标元素添加相应的样式。
方法:$(element).addClass();
$("p").addClass("p1");//该示例设置元素p的样式为p1。
移除删除:removeClass()方法,使用该方法移除目标元素的指定样式。
方法:$(element).removeClass();
$("p").removeClass("ul");//该方法去除掉p元素的ul类样式。
判断是否添加或删除类名:toggleClass()方法,如果有就删除名,如果没有就加类名。
方法:$(element).toggleClass();
$("p").toggleClass("p1");//该方法来回切换【添加删除实现切换】元素p的样式p1.
判断元素是否有指定类名:$(element).hasClass()
方法:$(element).hasClass(class);
注意: 如果有指定类名,返回值为true, 否则返回false
alert($("p").hasClass("ul"));//打印出p元素是否有ul样式。
addClass()和attr()方法设置样式的不同,attr方法把元素的属性名对应的属性值设为方法中的参数值,addClass()则把属性值。
添加到属性名对应的属性值中。例:已有元素<p class='class1'>元素样式</p>,使用attr()和addClass()分别添加新样式。
$("p").attr("class","another").结果是<p class='another'>元素样式</p>
$("p").addClass("class","another")结果是<p class='class1 another'>元素样式</p>
属性操作方法attr()和prop()(重点)
attr()和removeAttr() 自定义属性
prop()和removeProp() 标准属性
属性操作
js:
标准属性:
获取属性: js对象.属性名
设置属性: js对象.属性名=值;
自定义属性:
获取属性: js对象.getAttribute('属性名');
设置属性: js对象.setAttribute('属性名','属性的值');
jq:
标准属性: prop()
获取属性: jq对象.prop('属性名')
设置属性: jq对象.prop('属性名','属性的值')
自定义属性:attr()
获取属性: jq对象.attr('属性名')
设置属性: jq对象.attr('属性名','属性的值')
注意:
- 1.attr()可以获取或设置标准属性和自定义属性
- 2. 在项目中一般使用attr()---除boolean属性以外
- 3.boolean属性一般常用prop()来操作
- 4.boolean属性: 属性名等于属性值
如: checked selected readyOnly disabled ....
例:
//该示例一次设置两个属性值。 $("p").attr({"title":"你最喜欢的水果","name":"水果"})。 //该方法就是移除p元素的name属性。 $("p").removeAttr("name");
课后练习
1、jquery选择器实现表格隔行换色效果。
主要实现功能:
1、奇数行和偶数行颜色不同。
2、表头的颜色与其他行颜色不同。
3、将内容包含“黑莓手机”的行字体颜色设置为绿色,字体大小:14px。
4、鼠标移动到某一行上mouseover,当前行颜色 高亮(激活样式)显示,鼠标移动开后,恢复原来的颜色。
5、点击表头“序号”后面的复选框,将所有记录全选,再次点击,取消全选。
效果:
代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="js/jquery.js"></script> <style> table{border-collapse: collapse;} table td { border: red 1px solid; width: 150px; text-align: center; } .active{background: green !important;/*把优先级提最高*/} </style> </head> <body> <table> <tr> <td>序号<input type="checkbox"></td> <td>名称</td> <td>价格</td> <td>数量</td> </tr> <tr> <td>1<input type="checkbox"></td> <td>apple手机</td> <td>5000</td> <td>10</td> </tr> <tr> <td>2<input type="checkbox"></td> <td>小米手机</td> <td>3000</td> <td>10</td> </tr> <tr> <td>3<input type="checkbox"></td> <td>诺基亚手机</td> <td>2000</td> <td>12</td> </tr> <tr> <td>4<input type="checkbox"></td> <td>三星手机</td> <td>1000</td> <td>13</td> </tr> <tr> <td>5<input type="checkbox"></td> <td>黑莓手机手机</td> <td>5500</td> <td>14</td> </tr> </table> <script> //奇数偶数行颜色不一样 $("table tr:even").css("background","#f00"); $("table tr:odd").css("background","#fff"); $("table tr:first-child").css("background","yellow"); //修改包含黑莓手机的字体大小和颜色 $("table td:contains('黑莓手机')").css({"color":"#00f","fontSize":"20px"}); //4.鼠标移动到某一行上mouseover,当前行颜色 高亮(激活样式)显示,鼠标移动开后,恢复原来的颜色 //方式一:直接使用.css()的方式 /* //鼠标移入 $("table tr").mouseover(function () { $(this).css("background","green"); }); //鼠标移出 $("table tr").mouseout(function () { $("table tr:even").css("background","#f00"); $("table tr:odd").css("background","#fff"); $("table tr:first-child").css("background","yellow"); }); */ /* //方式二:先获取当前tr的背景色,存到一个变量中,移出时再恢复 //鼠标移入 var bgcolor='';//颜色初始值 $("table tr").mouseover(function () { bgcolor = $(this).css("background");//获取当前颜色 //修改颜色 $(this).css("background","green"); }); //鼠标移出 $("table tr").mouseout(function () { $(this).css("background",bgcolor); }); */ //方式三:使用一个类来操作 $("table tr").mouseover(function () { $(this).addClass("active");//添加颜色 }).mouseout(function () { $(this).removeClass("active");//删除颜色 }); //5、点击表头“序号”后面的复选框,将所有记录全选,再次点击,取消全选。 $("table tr:first td input").click(function () { //获取input标签的状态 var bool = $(this).prop("checked"); if(bool){ $("table tr td input").prop("checked",bool); }else{ $("table tr td input").prop("checked",bool); } }); </script> </body> </html>
2、将前面3个的产品背景改为蓝色,将第4个产品的名称颜色改为红色,将第6以后的产品价格改为粉色,将最后一个产品的背景改为粉色,将第6个产品的评论字体大小设置为16px;
3、用ul实现下列布局,有图标的li要加上图标。使用jquery让3n+1的li字体颜色变为红色。
面试题
1 请问常见的JavaScript框架有哪些?各种框架有什么优缺点?
2 说一说 :input 和 input 两种选择器的相同点与不同点。