title: 45-jQuery的介绍和选择器 publish: true
jQuery 的介绍 引入 jQuery 的原因 在用 js 写代码时,会遇到一些问题:
如下图所示:
jQuery的出现,可以解决以上问题。
什么是 jQuery jQuery 是 js 的一个库,封装了我们开发过程中常用的一些功能,方便我们调用,提高开发效率。
js库是把我们常用的功能放到一个单独的文件中,我们用的时候,直接引用到页面里即可。
以下是jQuery的相关信息:
学习jQuery,主要是学什么 初期,主要学习如何使用jQuery操作DOM,其实就是学习jQuery封装好的那些API。
这些API的共同特点是:几乎全都是方法。所以,在使用jQuery的API时,都是方法调用,也就是说要加小括号(),小括号里面是相应的参数,参数不同,功能不同。
jQuery初体验 现在用原生 js 来写下面这一段代码:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <style > div { height : 100px ; background-color : pink; margin : 10px ; display : none; } </style > <script > window .onload = function ( ) { var btn = document .getElementsByTagName ("button" )[0 ]; var divArr = document .getElementsByTagName ("div" ); btn.onclick = function ( ) { for (var i = 0 ; i < divArr.length ; i++) { divArr[i].style .display = "block" ; divArr[i].innerHTML = "生命壹号" ; } } } </script > </head > <body > <button > 显示五个div盒子和设置内容</button > <div > </div > <div > </div > <div > </div > <div > </div > <div > </div > </body > </html >
如果用 jQuery 来写,保持其他的代码不变,<script>
部分的代码修改为:(需要提前引入 )
<script src ="jquery-1.11.1.js" > </script > <script > $(document ).ready (function ( ) { var jQbtn = $("button" ); var jQdiv = $("div" ); jQbtn.click (function ( ) { jQdiv.show (1000 ); jQdiv.html ("tomorrow!" ); }); }); </script >
jQuery 的两大特点 (1)链式编程 :比如.show()
和.html()
可以连写成.show().html()
。
链式编程原理:return this。
通常情况下,只有设置操作才能把链式编程延续下去。因为获取操作的时候,会返回获取到的相应的值,无法返回 this。
(2)隐式迭代 :隐式 对应的是 显式。隐式迭代的意思是:在方法的内部会为匹配到的所有元素进行循环遍历,执行相应的方法;而不用我们再进行循环,简化我们的操作,方便我们调用。
如果获取的是多元素的值,大部分情况下返回的是第一个元素的值。
jQuery 的使用 使用 jQuery 的基本步骤 (1)引包
(2)入口函数
(3)功能实现代码(事件处理)
如下图所示:
主要,导包的代码一定要放在js代码的最上面。
jQuery 的版本 jQuery 有两个大版本:
PS:开发版本一般用1.10以上。
我们以 v1.11.1版本为例,下载下来后发现,里面有两个文件:
它们的区别是:
jQuery 的入口函数和 $
符号 入口函数(重要) 原生 js 的入口函数指的是:window.onload = function() {};
如下:
window .onload = function ( ) { alert (1 ); }
而 jQuery的入口函数,有以下几种写法:
写法一:
$(document ).ready (function ( ) { alert (1 ); })
写法二:(写法一的简洁版)
$(function ( ) { alert (1 ); });
写法三:
$(window ).ready (function ( ) { alert (1 ); })
jQuery入口函数与js入口函数的区别 :
区别一:书写个数不同:
区别二:执行时机不同:
文档加载的顺序:从上往下,边解析边执行。
jQuery的$
符号 jQuery 使用 $
符号原因:书写简洁、相对于其他字符与众不同、容易被记住。
jQuery占用了我们两个变量:$
和 jQuery。当我们在代码中打印它们俩的时候:
<script src ="jquery-1.11.1.js" > </script > <script > console .log ($); console .log (jQuery); console .log ($===jQuery); </script >
打印结果如下:
从打印结果可以看出,$ 代表的就是 jQuery。
那怎么理解jQuery里面的 $
符号呢?
$
实际上表示的是一个函数名 如下:
$(); // 调用上面我们自定义的函数$ $(document).ready(function(){}); // 调用入口函数 $(function(){}); // 调用入口函数 $(“#btnShow”) // 获取id属性为btnShow的元素 $(“div”) // 获取所有的div标签元素
如上方所示,jQuery 里面的 $
函数,根据传入参数的不同,进行不同的调用,实现不同的功能。返回的是jQuery对象。
jQuery这个js库,除了 $
之外,还提供了另外一个函数:jQuery。jQuery函数跟 $
函数的关系:jQuery === $
。
js中的DOM对象 和 jQuery对象 比较(重点,难点) 二者的区别 通过 jQuery 获取的元素是一个数组 ,数组中包含着原生JS中的DOM对象。举例:
针对下面这样一个div结构:
<div > </div > <div class ="box" > </div > <div id ="box" > </div > <div class ="box" > </div > <div > </div >
通过原生 js 获取这些元素节点的方式是:
var myBox = document .getElementById ("box" ); var boxArr = document .getElementsByClassName ("box" ); var divArr = document .getElementsByTagName ("div" );
通过 jQuery 获取这些元素节点的方式是:(获取的都是数组)
var jqBox1 = $("#box" );var jqBox2 = $(".box" );var jqBox3 = $("div" );
我们打印出来看看:
上图显示,由于JQuery 自带了 css()方法,我们还可以直接在代码中给 div 设置 css 属性。
总结 :jQuery 就是把 DOM 对象重新包装了一下,让其具有了 jQuery 方法。
二者的相互转换 1、 DOM 对象 转为 jQuery对象 :
举例:(拿上一段的代码举例)
jqBox1 = $(myBox); jqBox2 = $(boxArr); jqBox3 = $(divArr);
DOM 对象转换成了 jquery 对象之后,上面的功能可以直接调用。
2、jQuery对象 转为 DOM 对象 :
jquery对象[index]; jquery对象.get (index);
jQuery对象转换成了 DOM 对象之后,可以直接调用 DOM 提供的一些功能。如:
jqBox3[0 ].style .backgroundColor = "black" ; jqBox3.get (4 ).style .backgroundColor = "pink" ;
总结 :如果想要用哪种方式设置属性或方法,必须转换成该类型。
举例:隔行变色 代码如下:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <script src ="jquery-1.11.1.js" > </script > <script > jQuery (function ( ) { var jqLi = $("li" ); for (var i = 0 ; i < jqLi.length ; i++) { if (i % 2 === 0 ) { jqLi[i].style .backgroundColor = "pink" ; } else { jqLi[i].style .backgroundColor = "yellow" ; } } }); </script > </head > <body > <ul > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > </ul > </body > </html >
效果如下:
jQuery 选择器 我们以前在CSS中学习的选择器有:
今天来学习一下jQuery 选择器。
jQuery选择器是jQuery强大的体现,它提供了一组方法,让我们更加方便的获取到页面中的元素。
1、jQuery 的基本选择器
解释如下:
举例:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <script src ="jquery-1.11.1.js" > </script > <script > jQuery (document ).ready (function ( ) { var jqBox1 = $("#box" ); var jqBox2 = $(".box" ); var jqBox3 = $("div" ); jqBox3.css ("width" , 100 ); jqBox3.css ("height" , 100 ); jqBox3.css ("margin" , 10 ); jqBox3.css ("background" , "pink" ); jqBox2.css ("background" , "red" ); jqBox1.css ("background" , "yellow" ); }); </script > </head > <body > <div > </div > <div class ="box" > </div > <div id ="box" > </div > <div class ="box" > </div > <div > </div > </body > </html >
效果如下:
2、层级选择器
解释如下:
举例:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <script src ="jquery-1.11.1.js" > </script > <script > $(function ( ) { var jqLi = $("ul li" ); jqLi.css ("margin" , 5 ); jqLi.css ("background" , "pink" ); var jqOtherLi = $("ul>li" ); jqOtherLi.css ("background" , "red" ); }); </script > </head > <body > <ul > <li > 111</li > <li > 222</li > <li > 333</li > <ol > <li > aaa</li > <li > bbb</li > <li > ccc</li > </ol > </ul > </body > </html >
效果:
3、基本过滤选择器
解释:
举例:
<script src ="jquery-1.11.1.js" > </script > <script > $(document ).ready (function ( ) { $("li:odd" ).css ("background" , "red" ); $("li:even" ).css ("background" , "green" ); $("ul li:eq(3)" ).css ("font-size" , "30px" ); $("li:lt(6)" ).css ("font-size" , "30px" ); $(".ulList1 li:gt(7)" ).css ("font-size" , "40px" ); $(".ulList li:first" ).css ("font-size" , "40px" ); $("li:last" ).css ("font-size" , "40px" ); }); </script >
4、属性选择器
5、筛选选择器
举例:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <script src ="jquery-1.11.1.js" > </script > <script > jQuery (function ( ) { var jqul = $("ul" ); jqul.find ("li" ).css ("background" , "pink" ); console .log (jqul.find ()); jqul.children ("li" ).css ("background" , "green" ); jqul.children ().eq (0 ).css ("background" , "red" ); jqul.children ().eq (0 ).next ().css ("background" , "yellow" ); jqul.children ().eq (0 ).next ().siblings ().css ("border" , "1px solid blue" ); console .log (jqul.children ().eq (0 ).parent ()); }); </script > </head > <body > <ul > <li > 生命壹号,永不止步</li > <li class ="box" > 生命壹号,永不止步</li > <span > 生命壹号,永不止步</span > <li class ="box" > 生命壹号,永不止步</li > <i > 生命壹号,永不止步</i > <li > 生命壹号,永不止步</li > <a id ="box" href ="#" > 生命壹号,永不止步</a > <ol > <li > 我是ol中的li</li > <li > 我是ol中的li</li > <li > 我是ol中的li</li > <li > 我是ol中的li</li > </ol > </ul > </body > </html >
效果:
举例 举例1:鼠标悬停时,弹出下拉菜单【重要】 完整版代码:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <style type ="text/css" > * { margin : 0 ; padding : 0 ; } ul { list-style : none; } .wrap { width : 330px ; height : 30px ; margin : 100px auto 0 ; padding-left : 10px ; background-color : pink; } .wrap li { background-color : yellowgreen; } .wrap > ul > li { float : left; margin-right : 10px ; position : relative; } .wrap a { display : block; height : 30px ; width : 100px ; text-decoration : none; color : #000 ; line-height : 30px ; text-align : center; } .wrap li ul { position : absolute; top : 30px ; display : none; } </style > <script src ="jquery-1.11.1.js" > </script > <script > $(document ).ready (function ( ) { var jqli = $(".wrap>ul>li" ); jqli.mouseenter (function ( ) { $(this ).children ("ul" ).show (); }); jqli.mouseleave (function ( ) { $(this ).children ("ul" ).hide (); }); }); </script > </head > <body > <div class ="wrap" > <ul > <li > <a href ="javascript:void(0);" > 一级菜单1</a > <ul > <li > <a href ="javascript:void(0);" > 二级菜单1</a > </li > <li > <a href ="javascript:void(0);" > 二级菜单2</a > </li > <li > <a href ="javascript:void(0);" > 二级菜单3</a > </li > </ul > </li > <li > <a href ="javascript:void(0);" > 一级菜单1</a > <ul > <li > <a href ="javascript:void(0);" > 二级菜单1</a > </li > <li > <a href ="javascript:void(0);" > 二级菜单2</a > </li > <li > <a href ="javascript:void(0);" > 二级菜单3</a > </li > </ul > </li > <li > <a href ="javascript:void(0);" > 一级菜单1</a > <ul > <li > <a href ="javascript:void(0);" > 二级菜单1</a > </li > <li > <a href ="javascript:void(0);" > 二级菜单2</a > </li > <li > <a href ="javascript:void(0);" > 二级菜单3</a > </li > </ul > </li > </ul > </div > </body > </html >
上方代码中,我们可以看到,用 jQuery来操作,是非常方便的。
实现效果如下:
this的用法:
上方代码中,核心的一行代码是:
$(this ).children ("ul" ).show (); $(this ).children ("ul" ).hide ();
如果我把这行代码中的this直接写成 DOM对象:
jqli.children ("ul" ).show (); jqli.children ("ul" ).hide ();
产生的结果是:(不是我们期望的结果)
两张图的对比,可以看出this的作用:谁正在调用函数,this就指的是谁。
举例2:鼠标悬停时变色 完整版代码如下:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <script src ="jquery-1.11.1.js" > </script > <script > $(function ( ) { var jqli1 = $("li:odd" ); var jqli2 = $("li:even" ); jqli1.css ("background" , "#cccccc" ); jqli2.css ("background" , "white" ); var color = "" ; $("li" ).mouseenter (function ( ) { color = $(this ).css ("background" ); $(this ).css ("background" , "green" ); }); $("li" ).mouseleave (function ( ) { $(this ).css ("background" , color); }); }); </script > </head > <body > <ul > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > <li > 生命壹号,永不止步</li > </ul > </body > </html >
效果如下:
举例3:突出显示 要求:鼠标悬停时,突出显示这个li,让其他的li都半透明。
用 jQuery的选择起来实现,会发现非常方便。
完整版代码如下:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <style type ="text/css" > * { margin : 0 ; padding : 0 ; } ul { list-style : none; } body { background : #000 ; } .wrap { margin : 100px auto 0 ; width : 630px ; height : 394px ; padding : 10px 0 0 10px ; background : #000 ; overflow : hidden; border : 1px solid #fff ; } .wrap li { float : left; margin : 0 10px 10px 0 ; } .wrap img { display : block; border : 0 ; } </style > <script src ="jquery-1.11.1.js" > </script > <script > jQuery (window ).ready (function ( ) { $(".wrap" ).find ("li" ).mouseenter (function ( ) { $(this ).css ("opacity" , 1 ).siblings ("li" ).css ("opacity" , 0.4 ); }); $(".wrap" ).mouseleave (function ( ) { $(this ).children ().children ("li" ).css ("opacity" , 1 ); }); }); </script > </head > <body > <div class ="wrap" > <ul > <li > <a href ="#" > <img src ="images/01.jpg" alt ="" /> </a > </li > <li > <a href ="#" > <img src ="images/02.jpg" alt ="" /> </a > </li > <li > <a href ="#" > <img src ="images/03.jpg" alt ="" /> </a > </li > <li > <a href ="#" > <img src ="images/04.jpg" alt ="" /> </a > </li > <li > <a href ="#" > <img src ="images/05.jpg" alt ="" /> </a > </li > <li > <a href ="#" > <img src ="images/06.jpg" alt ="" /> </a > </li > </ul > </div > </body > </html >
实现的效果:
注意这里的css布局里,每一个图片都用一个li来存放。设置li的父亲的宽度之后,然后将li设置为浮动,即可自适应地排列成两排。
工程文件:
举例4:手风琴效果 完整版代码:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <style type ="text/css" > * {padding : 0 ;margin : 0 ;} ul { list-style-type : none;} .parentWrap { width : 200px ; text-align :center; } .menuGroup { border :1px solid #999 ; background-color :#e0ecff ; } .groupTitle { display :block; height :20px ; line-height :20px ; font-size : 16px ; border-bottom :1px solid #ccc ; cursor :pointer; } .menuGroup > div { height : 200px ; background-color :#fff ; display :none; } </style > <script src ="jquery-1.11.1.min.js" > </script > <script > $(function ( ) { $(".parentWrap span" ).click (function ( ) { $(this ).next ().show ().parent ("li" ).siblings ("li" ).find ("div" ).hide (); }); }) </script > </head > <body > <ul class ="parentWrap" > <li class ="menuGroup" > <span class ="groupTitle" > 标题1</span > <div > 我是弹出来的div1</div > </li > <li class ="menuGroup" > <span class ="groupTitle" > 标题2</span > <div > 我是弹出来的div2</div > </li > <li class ="menuGroup" > <span class ="groupTitle" > 标题3</span > <div > 我是弹出来的div3</div > </li > <li class ="menuGroup" > <span class ="groupTitle" > 标题4</span > <div > 我是弹出来的div4</div > </li > </ul > </body > </html >
效果:
注意这里的 选择器的用法:parent、next
举例5:淘宝精品服饰广告 完整版代码:
<!DOCTYPE html > <html > <head lang ="en" > <meta charset ="UTF-8" > <title > </title > <style type ="text/css" > * { margin : 0 ; padding : 0 ; font-size : 12px ; } ul { list-style : none; } a { text-decoration : none; } .wrapper { width : 298px ; height : 248px ; margin : 100px auto 0 ; border : 1px solid pink; overflow : hidden; } #left , #center , #right { float : left; } #left li , #right li { background : url (images/lili.jpg ) repeat-x; } #left li a , #right li a { display : block; width : 48px ; height : 27px ; border-bottom : 1px solid pink; line-height : 27px ; text-align : center; color : black; } #left li a :hover , #right li a :hover { background-image : url (images/abg.gif ); } #center { border-left : 1px solid pink; border-right : 1px solid pink; } </style > <script src ="jquery-1.11.1.js" > </script > <script > jQuery (function ( ) { $("#left li" ).mouseenter (function ( ) { $("#center li" ).eq ($(this ).index ()).show ().siblings ("li" ).hide (); }); $("#right li" ).mouseenter (function ( ) { $("#center li:eq(" + ($(this ).index () + 9 ) + ")" ).show ().siblings ("li" ).hide (); }); }); </script > </head > <body > <div class ="wrapper" > <ul id ="left" > <li > <a href ="#" > 女靴</a > </li > <li > <a href ="#" > 雪地靴</a > </li > <li > <a href ="#" > 冬裙</a > </li > <li > <a href ="#" > 呢大衣</a > </li > <li > <a href ="#" > 毛衣</a > </li > <li > <a href ="#" > 棉服</a > </li > <li > <a href ="#" > 女裤</a > </li > <li > <a href ="#" > 羽绒服</a > </li > <li > <a href ="#" > 牛仔裤</a > </li > </ul > <ul id ="center" > <li > <a href ="#" > <img src ="images/女靴.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/雪地靴.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/冬裙.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/呢大衣.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/毛衣.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/棉服.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/女裤.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/羽绒服.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/牛仔裤.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/女包.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/男包.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/登山鞋.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/皮带.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/围巾.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/皮衣.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/男毛衣.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/男棉服.jpg" width ="200" height ="250" /> </a > </li > <li > <a href ="#" > <img src ="images/男靴.jpg" width ="200" height ="250" /> </a > </li > </ul > <ul id ="right" > <li > <a href ="#" > 女包</a > </li > <li > <a href ="#" > 男包</a > </li > <li > <a href ="#" > 登山鞋</a > </li > <li > <a href ="#" > 皮带</a > </li > <li > <a href ="#" > 围巾</a > </li > <li > <a href ="#" > 皮衣</a > </li > <li > <a href ="#" > 男毛衣</a > </li > <li > <a href ="#" > 男棉服</a > </li > <li > <a href ="#" > 男靴</a > </li > </ul > </div > </body > </html >
效果:
工程文件:
我的公众号 想学习更多技能 ?不妨关注我的微信公众号:千古壹号 (id:qianguyihao
)。
扫一扫,你将发现另一个全新的世界,而这将是一场美丽的意外: