多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # jQuery简介 jQuery是一款优秀的javaScript库(框架),该框架凭借简洁的语法和跨平台的兼容性,极大的简化了开发 人员对HTML文档,DOM,事件以及Ajax的操作。 主旨口号:写的更少, 干的更多(以更少的代码,实现更多的功能) 作者:John Resig(约翰·雷西格) John Resig(约翰·雷西格),1984年5月8日出生于美国纽约。 个人著作: 精通JAVASCRIPT 以及 JAVASCRIPT忍者的秘密 工作经验:先后于Mozilla、可汗学院担任开发工程师。 jQuery框架版本相关介绍开源许可协议:MIT许可证 官方网站: [http://jquery.com/](http://jquery.com/) 中文API网站: [http://jquery.cuishifeng.cn/](http://jquery.cuishifeng.cn/) 托管仓库: [https://github.com/jquery/jquery](https://github.com/jquery/jquery) 版本情况: JQuery目前分成1.x版、2.x版和3.x版本,从 2.0.0开始不再支持IE 6/7/8,2.0.0版本之前通过jQuery Migrate plugin与先前版本保持兼容。 最新版本 :3.2.1 # jQuery的优点 * 轻量级 * 免费开源 * 完善的文档 * 丰富的插件支持 * 完善的Ajax功能 * 不会污染顶级变量 * 强大的选择器功能 * 出色的DOM操作封装 * 出色的浏览器兼容性 * 可靠的事件处理机制 * 隐式迭代和链式编程操作 # jQuery的基本功能 ## Query 查找 ### **1. 访问和操作DOM元素** &emsp; &emsp;说明:使用jQuery库,可以很方便地获取和修改页面中的某元素无论是删除、移动、复制元素,jQuery都 提供了一整套方便、快捷的方法,既减少了代码的编写,又大大提高了用户对页面的体验度。 **方法示例**: **append()** ———— 向每个匹配的元素内部后面追加内容。 **appendTo** ————把内容在每个匹配的元素外部后面插入。 **prepend()** ————向每个匹配的元素内部前面追加内容。 **prependTo** ————把内容在每个匹配的元素外部前面插入。 **empty()** —————删除匹配的元素集合中所有的子节点。 **remove()** ————从DOM中删除所有匹配的元素。 &emsp; &emsp;这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。但**除了这个元素本身得以保留之外,其他的比如绑定的事件,附加的数据等都会被移除。** **detach()**—————从DOM中删除所有匹配的元素。 &emsp; &emsp;这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。与remove()不同的是,**除了这个元素本身得以保留之外,所有绑定的事件、附加的数据等都会保留下来。** html() text()等 例: html和css代码 ``` <button>点击删除</button> <button>点击增加</button> <ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> ``` JavaScript代码 ``` <script> //给 li 绑定事件 $("li").click(function () { alert(1) }); //点击按钮,在ul里面的前面添加一个li $("button").click(function () { //创建节点 var newtag = $("<li>列表项</li>");//创建节点 //分别在内部和外部后面增加节点 $("ul").append(newtag); //在ul内部后面追加新节点 newtag.appendTo($("ul")); //把新节点追加到ul里面的后面 //分别在内部和外部前面面增加节点 $("ul").prepend(newtag); //在ul内部的前面追加新节点 newtag.prependTo($("ul")); //把新节点追加到ul里面的前面 //删除内容 $("button:eq(0)").click(function () { $("ul").remove(); // 把选中的元素在页面中删除,但在jQuery对象会保留,绑定的事件和附加的数据会被移除 $("ul").empty(); //把选中元素里面的内容清空 lis.detach(); //把选中的元素在页面中删除,但在jQuery对象会保留,绑定的事件和附加的数据会保留下来 }); //以下用来测试恢复的节点说绑定的事件和附加的数据是否保存 $("button:eq(1)").click(function () { $("ul").append(lis) }); }); </script> ``` ### **2. 控制页面的CSS样式** &emsp; &emsp;说明:使用jQuery框架,可以帮助我们方便快捷的来操作CSS样式,且jQuery已经完成了浏览器兼容性处理。 **方法示例:** **css()**————————添加或修改匹配元素的样式属性。 **addClass()**—————为每个匹配的元素添加指定的类名。 **toggleClass()**————切换类,若存在就删除一个类,若不存在就添加一个类 **hasClass()**—————检查当前的元素是否含有某个特定的类,如果有,则返回true。 **removeClass()**———从所有匹配的元素中删除全部或者指定的类。 html和css代码 ``` <html> <style> .hezi { background: tan; } .box { width: 200px; height: 200px; border: 1px solid #000; } </style> <script src="jquery-3.4.1.js"></script> <body> <button>获取类属性</button> <button>增加类</button> <button>删除类</button> <button>切换类</button> <button>检索类</button> <div class="hezi">盒子</div> </body> </html> ``` JavaScript代码 ``` <script> $("button").eq(0).click(function () { //添加或修改类属性 $(".hezi").css('font-size','30px'); }); $("button").eq(1).click(function () { //增加box类 $(".hezi").addClass("box"); }); $("button").eq(2).click(function () { //如果不指定删除类名,就会删除全部类名 $(".hezi").removeClass("box"); }); $("button").eq(3).click(function () { //如果不指定删除类名,就会删除全部类名 if ( $(".box").hasClass("hezi") ){ alert('201314'); } }); $("button").eq(4).click(function () { //切换box类,如果有这个类就删掉,没有就添加 $(".hezi").toggleClass("box"); }); </script> ``` ### **3. 完善的Ajax网络请求** &emsp; &emsp;说明: **方法示例**: **ajax()** ————通过 HTTP 请求加载远程数据。 **get()** ————取得其中一个匹配的元素。 **post()** ————通过远程 HTTP POST 请求载入信息。 html和css代码 ``` <p>段落1</p> <p>段落2</p> ``` JavaScript代码 ``` <script> var aa =$('p').get(0); console.log(aa); //输出结果:<p>段落1</p> var bb =$('p').get(); console.log(bb); </script> ``` ### **4. 页面标签事件处理** &emsp; &emsp;说明: **方法示例**: **on()**———————— 在选择元素上**绑定**一个或多个事件的事件处理函数。 **off()** ————————在选择元素上**移除**一个或多个事件的事件处理函数。 **click()** ———————触发每一个匹配元素的click事件。 **mouseenter()** ————当鼠标指针穿过元素时,会发生 mouseenter 事件。该事件大多数时候会与mouseleave 事件一起使用。 **hover()**———————一个模仿悬停事件(鼠标移动到一个对象上面及移出这个对象)的方法。 html和css代码 ``` <style> div{ width: 100px; height: 100px; background: skyblue; border: 1px solid #000; margin: 10px; } .box1{ width: 200px; height: 200px; background: skyblue; } </style> <body> <button class="btn2">撤销变色</button> <button class="btn">点击</button> <div class="box">盒子</div> </body> ``` JavaScript代码 ``` ~~~ <script> //新建节点 var oBOX = $('<div class="obox">盒子2</div>'); var oBtn = $('<button class="btn1">变色和增高</button>'); //注册点击事件 $('.btn').click(function () { $('.box').css('width','300px'); $('.box').after(oBOX); oBtn.insertAfter($('.btn'));//在 .btn 后面插入 oBtn }); //事件委托, $('body').on('click','.btn1',function () { $('.box').css('background','pink'); console.log('变色'); }); $('body').on('mouseenter','.btn1',function () { $('.box').css('height','300px'); console.log('变高'); }); $('body').on('mouseleave','.btn1',function () { $('.box').css('height','100px'); console.log('恢复'); }); //点击 .btn2 移除 .btn1 的 click 事件,mouseenter 事件不受影响 $('.btn2').on('click',function () { console.log('禁止变色按钮'); $('body').off('click','.btn1');// }); //鼠标移入事件 $('body').on('mouseenter','.box',function () { $('.box').css({ width:'300px', height:200 }); }); //鼠标移出事件 $('body').on('mouseleave','.box',function () { $('.box').css({ width:'100px', height:100 }); }); //鼠标进入事件 $('.btn').hover(function () { console.log('鼠标进入'); $(this).css('background','pink'); $('.obox').css('font-size','30px'); },function () { console.log('鼠标离开'); $(this).css('background','#ccc'); $('.obox').css('font-size','16px'); }); </script> ``` ### **5. 整套的动画特效实现** &emsp; &emsp;说明: **方法示例**: **show()** —————显示隐藏的匹配元素。 **hide()** —————隐藏显示的元素 **slideDown()** ——通过高度变化(向下增大)来动态地显示所有匹配的元素,在显示完成后可选地触发一个回调函数。 **slideUp()** ————通过高度变化(向上减小)来动态地隐藏所有匹配的元素,在隐藏完成后可选地触发一个回调函数。 **slideToggle()**———通过高度变化来切换所有匹配元素的可见性,并在切换完成后可选地触发一个回调函数。 **animate()** ———— 用于创建自定义动画的函数。 html和css代码 ``` <style> div{ width: 200px; height: 200px; background: skyblue; } </style> ~~~ <body> <button>滑动隐藏</button> <button>滑动显示</button> <button>滑动切换</button> <button>隐藏</button> <button>显示</button> <button>动画</button> <div></div> </body> ~~~ ``` JavaScript代码 ``` <script> $(function () { //滑动隐藏 $('button:eq(0)').click(function () { $('div').slideUp(); }); //滑动显示 $('button:eq(1)').click(function () { $('div').slideDown(); }); //滑动切换 $('button:eq(2)').click(function () { $('div').slideToggle(); }); //隐藏 $('button:eq(3)').click(function () { $('div').hide(); }); //显示 $('button:eq(4)').click(function () { $('div').show(); }); //动画 $('button:eq(5)').click(function () { $('div').animate({ width: '500px', height: 400, background: 'pink' },1500); }); }) </script> ``` ### **6. 好用的工具方法和强大的插件支持** &emsp; &emsp;说明: **方法示例:** **extend()** ———用一个或多个其他对象来扩展一个对象,返回被扩展的对象。 **each()** ———— 以每一个匹配的元素作为上下文来执行一个函数。 **map()** ————将一组元素转换成其他数组(不论是否是元素数组) ***** 1. extend() JavaScript代码 ``` var settings = { validate: false, limit: 5, name: "foo" }; var options = { validate: true, name: "bar" }; jQuery.extend(settings, options); //结果: settings == { validate: true, limit: 5, name: "bar" } ``` 2. each() html和css代码 ``` <p>1</p> <p>2</p> <p>3</p> <p>4</p> <p>5</p> ``` JavaScript代码 ``` <script> //写法一 $("p").each(function (index,ele) { //输出函数的参数 console.log(arguments); //console.log(index); //console.log(ele); //console.log($(ele)); //dom对象 // ele.innerText = index + "哈哈" //jquery对象 $(ele).text("你好世界"+index); }); //写法二 var arr = ["你好",2,3]; $.each(arr,function (index,ele) { //index是数组的索引值,ele是每个元素 console.log(ele); }); var json = {name:"王龙",age:15,marry:true}; $.each(json,function (key,val) { //key是对象的属性,val是对象的属性值 console.log(key); }) </script> ``` 3. map() html和css代码 ``` <p> 我是内容 1</p> <p> 我是内容 2</p> <p> 我是内容 3</p> <p> 我是内容 4</p> <p> 我是内容 5</p> ``` JavaScript代码 ``` <script> //把上面五个p里面的文字放在一个数组里面 //each遍历 var arr = []; $("p").each(function (index,ele) { arr.push($(ele).text()) }); //console.log(arr); //遍历并且返回一个数组 var array = $("p").map(function (index,ele) { return $(ele).text(); }); console.log(array); </script> ``` # jQuery体验 ## jQuery框架的使用步骤 1. 下载jQuery框架在本地的电脑上(官网提供框架的下载链接,两个版本可供选择) 2. 创建项目,在项目的页面中使用script引入jQuery框架 3. 使用jQuery框架来实现相关的功能 ## jQuery框架的代码风格: 1. 美元符号起始 &emsp;&emsp;在jQuery框架中,不管是页面元素的选择、内置的功能函数,都使用美元符号来起始的,而这个美元符号,其实就是jQuery框架当中最重要且独有的对象: jQuery对象。 2. 链式编程操作 &emsp;&emsp;jQuery框架中为我们提供了链式编程操作,链式编程的特点中,几乎每个jQuery方法执行完毕后都会把当前正在操作的对象作为返回值返回,如果我们需要对某个标签执行多个操作,那么使用链式编程可以让代码更短,更简洁 如: `$("#demoId").addClass("cur").siblings().removeClass("cur");` ## jQuery框架使用准备 ### jQuery框架和JavaScript加载模式对比 ``` //原生的JavaScript文档加载,先写的会覆盖后写的; <script> window.onload = function () { console.log("window.onload——1") }; window.onload = function () { console.log("window.onload——2") } </script> //打印结果: window.onload--2 //jQuery的文档加载,不会相互覆盖 <script src="jquery-3.2.1.js"></script> <script> $(document).ready(function () { console.log("ready——1") }); $(document).ready(function () { console.log("ready——2") }) ; //方式二,简写一 $(function () { console.log("ready——3") }); //方式三,简写二 $().ready(function () { console.log("ready——4") }); //打印结果:ready——1 // ready——2 // ready——3 // ready——4 </script> ``` ### 两种加载模式的区别: 1. 执行时机不同 window.onload方法需要等所有的资源(CSS\\JS\\图片等)都加载完毕后再执行函数中的代码。 jQuery框架的ready方法只等DOM文档加载完毕后立即执行包裹代码。 2. 执行次数不同 window.onload方法,只会执行一次,后面的会把前面的覆盖, jQuery框架的ready方法,有几次执行几次,不存在覆盖的问题。 3. jQuery存在多种简写方式 完整的编写方式:$(document).ready(function(){}) 简写方式:`$().ready(function()) $(function())` ## jQuery框架冲突解决 ``` <script> //解决冲突方法一、 var jQ=$.noConflict(); // conflict 冲突, noConflict() 不冲突,运行这个函数将变量$的控制权让渡给第一个实现它的那个库,释放 jQuery 对 $ 变量的控制。 //解决冲突方法二、 console.log(jQuery('div')); //通过jQuery()直接获取 var $='今天天气很好'; console.log($); console.log(jQ); </script> ``` # jQuery对象和DOM对象的相互转换 DOM对象:每个HTML页面都是一个 DOM对象( Document Object Model ,文本对象模型),通过传统的 JavaScript方法访问页面中的元素,就是访问 DOM 对象。 jQuery对象:在 jQuery框架中,通过本身自带的方法获取页面元素的对象,称为 jQuery 对象 ; html和css代码 ``` <body> <div>1</div> <div>2</div> </bod ``` JavaScript代码 ``` <script> window.onload = function () { //通过原生js方法获取到的odiv这个对象是原生dom对象 var odiv = document.getElementsByTagName("div")[0]; console.log(odiv); odiv.style.width = 400 + "px"; odiv.style.height = 400 + "px"; odiv.style.backgroundColor = "skyblue"; //通过jQuery方法来获取元素,是jQuery对象,不能直接使用原生js的属性和方法 console.log( $("div") ); //$("div").css("width","400px").css("height","400px").css("background","pink") // jQuery对象转原生dom对象 //方法一 console.log( $("div")[0] ); //方法二 console.log( $("div").get(1) ); //怎么把原生dom对象转化成jQuery //直接使用$选择这个对象 console.log( $(odiv) ); } </script> ``` # jQuery特点总结 * jQuery省略了取数据模块,可以直接通过$()选择元素,并且支持 css里面所有选择器 * jQuery允许对群体数据进行直接控制 * jQuery里面所有的事件都省略了on * jQuery封装了很多常用的方法,可以直接调用 html和css代码 ``` <body> <button><span>按钮1</span></button> <button>按钮2</button> <button>按钮3</button> <button>按钮4</button> <button>按钮5</button> <button>按钮6</button> <button>按钮7</button> <button>按钮8</button> <button>按钮9</button> <button>按钮10</button> </body> ``` JavaScript ``` <script> //原生 js 写法 window.onload = function () { //获取btns var btns = document.getElementsByTagName("button"); for (var i = 0; i < btns.length; i++) { btns[i].onclick = function () { alert( this.innerText ); } } }; // jQuery 写法 $(function () { $("button").click(function () { //console.log( $(this) ) //alert( this.innerText ) alert( $(this).text() ); }); }); </script> ``` # jQuery框架的CSS方法 **使用原生的方式来设置标签的样式** ```<body> <div>我是div标签</div> <button id="btnID">按钮</button> <script> window.onload = function () { var oBtn = document.getElementById("btnID"); oBtn.onclick = function () { var oDiv = document.getElementsByTagName("div")[0]; oDiv.style.height = "50px"; oDiv.style.width = "200px"; oDiv.style.background = "red"; } </script> </body> ``` **使用jQuery中的css方法来设置标签的样式** ``` <body> <div>我是div标签</div> <button id="btnID">按钮</button> <script src="jquery-3.2.1.js"></script> <script> $(function () { $("#btnID").click(function () { $("div").css("height","50px").css("width","200px").css("background","red"); }) }) </script> </body> ``` **CSS方法的语法:** 1. $("selector").css(name,value); 2. $("selector").css(name1,value).css(name2,value)...; 3. $("selector").css( { name1 : value , name2 : value}) ``` <script> $(function () { $("#btnID").click(function () { //01 CSS方法的第一种使用方式 $("div").css("height","50px"); $("div").css("width","200px"); $("div").css("background","red"); //02 CSS方法的第二种使用方式:链式编程 $("div").css("height","50px") .css("width","200px").css("background","red"); //03 CSS方法的第三种使用方式:传递样式键值对的对象作为参数 $("div").css({ "height":"100px", "width":"200px", "background":"red" }) }) }) </script> ``` # jQuery操作html 1. $("selector").html(value); 修改html 2. $("selector").html(); 访问html 3. $("selector").text(value); 修改文本内容 4. $("selector").text(); 访问文本内容 ``` <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <script src="jquery-3.4.1.js"></script> <script> $("button:eq(0)").click(function(){ //修改html $("div").html("<h1>标题1<h1><p>段落</p>") }); $("button:eq(1)").click(function(){ //访问html $("div").html(); }); $("button:eq(2)").click(function(){ //访问内本内容 $("div").text(); }); </script> </head> <body> <button>修改</button> <button>访问全部</button> <button>访问文字</button> <div> </div> </body> </html> ``` 1 1 1 1 1 1 1 1 1 1