还剩48页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
教学课件jQueryjQuery是当今前端开发中最热门的JavaScript库之一,凭借其简洁的语法和强大的功能,帮助开发者大幅提升开发效率本课件将系统介绍jQuery的核心知识和应用技巧作为一个轻量级的JavaScript库,jQuery不仅支持所有主流浏览器,还提供了丰富的API,让复杂的JavaScript编程变得简单高效无论您是前端开发新手还是有经验的工程师,掌握jQuery都将为您的开发工作带来便利目录基础知识jQuery简介、基础语法、选择器系统核心功能DOM操作、事件处理、动画特效、AJAX通信拓展应用插件机制、案例实战、最佳实践、总结答疑本课程将通过循序渐进的方式,带领大家从jQuery的基础概念入手,逐步掌握其核心功能和高级应用,最终能够在实际项目中灵活运用jQuery解决各种前端开发问题简介jQuery的诞生jQuery1核心理念jQuery是一个开源的JavaScript库,由John Resig于2006年发布它的写更少的代码,做更多的事情(Write Less,Do More)设计初衷是为了简化HTML文档遍历、事件处理、动画设计和Ajax交互等操作2主要特点随着互联网的发展,jQuery迅速成为最流行的JavaScript库之一,改变跨浏览器兼容性强,选择元素灵活,操作简便高效了前端开发的格局为什么选?jQuery简洁的代码jQuery可以用一行代码实现传统JavaScript需要多行代码才能完成的功能,语法简洁明了,极大提高了可读性高效的开发内置了大量实用函数,简化了DOM操作、事件处理、动画效果等常见任务,大幅提升开发效率丰富的生态拥有大量的插件和示例,以及活跃的社区支持,开发者可以轻松找到解决方案和参考资源选择jQuery不仅能够简化开发流程,还能够确保代码在不同浏览器中的一致性表现,是前端开发的得力助手使用现状jQuery12006-2010jQuery诞生并迅速流行,成为前端开发标配工具22010-2015jQuery市场普及率达到顶峰,绝大多数网站和企业系统采用3至今2015-虽然前端框架如Vue、React兴起,但jQuery依然嵌入在大量遗留系统中,维持着广泛的使用基础尽管近年来前端技术栈更新迭代迅速,但jQuery凭借其简单易用的特性和庞大的存量项目基础,仍然在web开发中占有重要地位,特别是在内部系统和传统企业应用中快速入门基础引入——从引入(推荐)CDNscript src=https://cdn.bootcdn.net/ajax/libs/jquery/
3.
6.0/jquery.min.js/script通过CDN引入jQuery可以利用缓存机制,提高页面加载速度本地部署方式script src=js/jquery-
3.
6.
0.min.js/script下载jQuery文件到本地目录,适合对网络依赖性低的项目放置位置一般放在head标签中或body标签结束前,建议放在body结束前以提高页面加载速度无论采用哪种方式引入jQuery,都应确保在使用jQuery代码之前完成引入,避免出现$is notdefined的错误你的第一个程序jQuery核心语法解析!DOCTYPE htmlhtmlheadtitle第一个jQuery程序/title script$document.ready确保DOM完全加载后再执行代码,避免操作不存src=https://cdn.bootcdn.net/ajax/libs/jquery/
3.
6.0/jque在的DOM元素ry.min.js/script/headbody h1id=title欢迎学简写形式$function{...};习jQuery!/h1script$document.readyfunction{$#title.csscolor,blue;};这个简单的例子展示了jQuery的基本用法选择一个元素,然后对其应用/script/body/html操作这是jQuery编程的核心模式基本语法结构行为.action对选中元素执行某种操作选择器$选择器根据CSS语法选择元素链式操作方法返回jQuery对象,可继续调用其他方法//链式操作示例$#myElement.hide.csscolor,red.slideDown
1000.addClasshighlight;jQuery的语法设计非常优雅,通过链式操作可以在一行代码中完成多个操作,大大减少了代码量,提高了可读性和开发效率选择器概览jQuery基本选择器层级选择器过滤选择器包括ID选择器$#id、类选择器$.class和包括后代选择器$a b、子元素选择器包括位置过滤$li:first、内容过滤标签选择器$tag$ab和相邻选择器$a+b$div:contains文本和可见性过滤$p:visiblejQuery选择器是其强大功能的基础,它借鉴了CSS的选择器语法,使得选择DOM元素变得直观而高效掌握选择器是学习jQuery的第一步,也是最重要的步骤之一选择器id语法与特点!--HTML结构--div id=container p这是一个段落使用$#id语法,通过元素的id属性选择单个元素/p/div!--jQuery代码--script$function{//选择id为container的元素并修改其背景色id选择器是最高效的选择器,因为id在页面中应当是唯一的,浏览器可以直$#container.cssbackground-color,#f0f0f0;接通过document.getElementById方法快速定位//向id为container的元素内添加内容$#container.appendp新增内容/p;};/script使用id选择器时,应注意页面中id值必须唯一,否则选择器只会匹配到第一个具有该id的元素选择器class语法与用途!--HTML结构--ul liclass=item highlight项目使用$.className语法,选择所有具有指定class属性的元素1/li liclass=item项目2/li liclass=item项目3/li/ul!--jQuery代码--script$functionclass选择器是最常用的选择器之一,因为它可以同时选择多个元素,实现{//选择所有class为item的元素$.item.cssfont-批量操作size,16px;//选择同时具有item和highlight类的元素$.item.highlight.csscolor,•可以选择多个具有相同类的元素red;};/script•元素可以同时拥有多个类•适合对一组相似元素进行统一处理标签选择器基本语法应用场景使用$tagName语法,选择所有指定标签类型的元素当需要对页面中所有相同类型的元素进行统一操作时,标签选择器非常有用例如$p选择所有段落元素,$div选择所有div元素常用于初始化样式、添加统一事件处理等场景//示例为页面中所有链接添加新窗口打开属性$a.attrtarget,_blank;//示例为所有段落添加鼠标悬停效果$p.hover function{$this.addClasshover;},function{$this.removeClasshover;};标签选择器虽然使用简单,但由于它会选择页面中所有指定类型的元素,可能会影响性能在元素数量较多的页面中,建议结合其他选择器使用以缩小选择范围层级选择器后代选择器$ancestor descendant-选择ancestor元素内的所有descendant元素,无论嵌套多深例$div p选择所有div内的段落,包括嵌套在其他元素中的段落子元素选择器$parentchild-仅选择parent的直接子元素例$ulli只选择ul的直接子元素li,不包括嵌套在更深层的li相邻元素选择器$prev+next-选择紧跟在prev元素后的next元素例$h2+p选择紧跟在h2后面的段落层级选择器帮助我们精确定位DOM树中的元素,特别是在复杂的HTML结构中合理利用层级选择器可以避免为元素添加过多的id和class属性,使HTML结构更加简洁属性选择器基本语法实际应用示例•选择所有具有title属性的元素$[title]//选择具有特定属性的元素$[attribute]//选择属性值等•选择所有type为text的输入框$input[type=text]于指定值的元素$[attribute=value]//选择属性值包含指定值的元素$[attribute*=value]//选择属性值以指定值开头•选择所有以.jpg结尾的图片$img[src$=.jpg]的元素$[attribute^=value]//选择属性值以指定值结尾的•选择所有链接到外部网站的锚点$a[href^=http]元素$[attribute$=value]属性选择器在表单处理和特定元素筛选中特别有用,可以避免为元素添加额外的class过滤选择器位置过滤子元素过滤:first,:last,:eqn,:gtn,:ltn:nth-childn,:first-child,:last-child例$li:first选择第一个li元素例$li:nth-childodd选择奇数位置的li内容过滤可见性过滤:containstext,:empty,:hasselector:visible,:hidden例$p:containsjQuery选择包含例$div:visible选择所有可见的divjQuery文本的段落过滤选择器通常以冒号:开头,可以与其他选择器组合使用,进一步缩小选择范围它们为精确选择元素提供了强大的功能,特别是在处理列表、表格等结构化数据时非常有用组合选择器多元素选择交集选择使用逗号分隔多个选择器,可以同时选择多种不同的元素不使用任何分隔符,直接连接多个选择器,表示同时满足多个条件//同时选择所有h
1、h2和h3元素$h1,h2,h
3.csscolor,//选择同时是段落且class为highlight的元素blue;//同时选择id为header的元素和class为content的元$p.highlight.cssbackground-color,yellow;//素$#header,.content.fadeIn;选择同时具有data-role属性和class为btn的元素$[data-role].btn.onclick,function{//处理点击事件};组合选择器极大地增强了jQuery选择元素的灵活性,通过组合不同类型的选择器,可以精确地定位到需要操作的元素,而无需修改HTML结构在复杂的页面中,灵活运用组合选择器可以大大简化代码查找与遍历向上遍历向下遍历•parent-获取直接父元素•children-获取直接子元素•parents-获取所有祖先元素•find-获取所有后代元素•closest-获取最近的匹配祖先过滤同级遍历•first/last-获取第一个/最后一个元素•siblings-获取所有兄弟元素•eqindex-获取指定索引的元素•next/prev-获取下一个/上一个元素•filter-根据条件过滤元素遍历方法允许我们从已选择的元素出发,在DOM树中移动并选择相关元素这些方法在处理复杂的DOM结构时特别有用,可以避免编写复杂的选择器操作基础DOM内容操作实际应用html-获取或设置HTML内容这些方法是jQuery中最常用的DOM操作方法,几乎在所有jQuery项目中都会用到text-获取或设置纯文本内容val-获取或设置表单元素的值html和text的区别html会解析HTML标签,而text会将HTML标签视为纯文本//获取内容var htmlContent=$#myDiv.html;varval方法不仅适用于文本输入框,还适用于下拉选择框、复选框、单选textContent=$#myDiv.text;var inputValue=按钮等各种表单元素$#myInput.val;//设置内容$#myDiv.htmlstrong新内容/strong;$#myDiv.text纯文本内容;$#myInput.val新输入值;属性操作方法方法attr removeAttr用于获取或设置HTML属性值用于移除指定的属性//获取属性var src=$img.attrsrc;//设置//移除单个属性$img.removeAttrwidth;//移单个属性$a.attrtarget,_blank;//设置多除多个属性(空格分隔)$a.removeAttrtarget个属性$img.attr{src:image.jpg,alt:描title;述文本,width:500};方法prop用于获取或设置DOM属性值(主要用于布尔属性)//获取复选框的选中状态var isChecked=$#myCheckbox.propchecked;//设置复选框为选中状态$#myCheckbox.propchecked,true;attr和prop的区别attr操作HTML属性(attribute),而prop操作DOM属性(property)对于checked、selected、disabled等布尔属性,建议使用prop方法样式操作方法类操作方法css用于获取或设置元素的CSS样式addClass-添加一个或多个类removeClass-移除一个或多个类//获取样式var color=$#myDiv.csscolor;//设置单个样式toggleClass-切换类(有则移除,无则添加)$#myDiv.csscolor,red;//设置多个样式$#myDiv.css{color:hasClass-检查是否包含指定类white,backgroundColor:#333,fontSize:16px,padding:10px};//添加类$p.addClasshighlight;$div.addClassactivevisible;//移除类$p.removeClasshighlight;//切换类$div.toggleClassactive;//检查类if$div.hasClassactive{//执行操作}在实际开发中,通常推荐使用类操作而非直接设置CSS样式,这样可以更好地分离结构和表现,提高代码的可维护性创建和插入节点创建节点内部插入使用$函数创建新的DOM元素append-在被选元素内部末尾插入var newDiv=$div新内容/div;prepend-在被选元素内部开头插入包裹插入外部插入wrap-在每个被选元素外包裹指定的HTML结构after-在被选元素之后插入wrapAll-在所有被选元素外包裹一个HTML结构before-在被选元素之前插入//创建新元素并设置属性var newLink=$a/a.attrhref,https://jquery.com.textjQuery官网;//在div末尾添加新内容$#myDiv.appendnewLink;//在列表开头添加新项$ul.prependli新列表项/li;//在段落之后插入水平线$p.afterhr;//在标题之前插入图片$h
1.beforeimg src=logo.png;删除与克隆节点删除节点克隆节点remove-删除元素及其事件处理程序clone方法用于创建选定元素的副本detach-删除元素但保留事件处理程序//克隆元素(不包括事件处理程序)var cloned=empty-清空元素内容但保留元素本身$#original.clone;//克隆元素(包括事件处理程序)varunwrap-移除元素的父元素clonedWithEvents=$#original.clonetrue;//克隆元素并插入到页面//完全删除元素$#element.remove;//暂时删除元素(稍后可$#original.clone.appendTo#destination;能会重新插入)var detached=$#element.detach;//清空元素内容$#container.empty;//删除父元素但保留内容$span.unwrap;克隆元素在需要重复使用相同结构时非常有用,可以避免重复创建元素的开销尺寸与位置API尺寸方法位置方法•width/height-元素内容区域的宽/高•position-获取相对于定位父元素的位置•innerWidth/innerHeight-包含内边距的宽/高•offset-获取相对于文档的位置•outerWidth/outerHeight-包含边框的宽/高•scrollTop/scrollLeft-获取或设置滚动条位置•outerWidthtrue/outerHeighttrue-包含边框和外边距的宽/高//获取元素宽度var contentWidth=$#box.width;var totalWidth=$#box.outerWidthtrue;//设置元素宽度$#box.width300;//获取元素位置var position=$#element.position;//{top:100,left:50}var offset=$#element.offset;//{top:120,left:70}//滚动到特定元素$html,body.animate{scrollTop:$#target.offset.top},1000;表单操作表单元素值操作表单序列化serialize方法将表单数据编码为字符串,常用于AJAX提交//获取文本框值var name=$#username.val;//设置文本框值$#username.val张三;//获取选中的单选按钮值var gender=serializeArray方法将表单数据转换为对象数组$input[name=gender]:checked.val;//获取下拉列表选中值var city=$#city.val;//获取多选下拉列表所有选中值var interests=//序列化表单数据var formData=$#myForm.serialize;//结果name=$#interests.val;//返回数组张三age=25city=北京//表单数据转为数组var formArray=$#myForm.serializeArray;//结果[{name:name,value:张三},...]//使用序列化数据进行AJAX提交$.ajax{url:process.php,type:POST,data:$#myForm.serialize,success:functionresponse{//处理响应}};事件基础事件绑定多事件绑定事件解绑on方法是jQuery中推荐的统一事件绑定方法,它替代了早期的可以同时绑定多个事件类型,或者为同一事件类型绑定多个处理函off方法用于移除事件绑定,可以移除特定类型的事件或所有事件bind、live和delegate方法数//基本语法$selector.oneventType,//绑定多个事件类型$#element.onmouseenter//移除特定事件$#element.offclick;//移除所有handler;//绑定单个事件$#myButton.onclick,mouseleave,function事件$#element.off;//移除特定处理函数varfunction{alert按钮被点击了!;};{$this.toggleClasshover;};//使用对象语法绑handler=function{/*...定多个事件$#element.on{click:function{/**/};$#element.onclick,处理点击*/},mouseenter:function{/*处理鼠标handler;$#element.offclick,handler;进入*/},mouseleave:function{/*处理鼠标离开*/}};事件委托详解什么是事件委托?实现方式事件委托是一种事件处理模式,它利用事件冒泡机制,将事件处理程序//不使用事件委托(每个li都绑定事件)$ul绑定到父元素上,而不是直接绑定到子元素上li.onclick,function当子元素触发事件时,事件会冒泡到父元素,然后由父元素的处理程序{$this.addClassactive;};//使用事件委托(只在ul根据事件源来执行相应的操作上绑定一个事件)$ul.onclick,li,function{$this.addClassactive;};事件委托的优势•减少事件处理程序的数量,提高性能•可以处理动态添加的元素(无需重新绑定)•减少内存占用在第二种方法中,事件处理程序绑定在ul元素上,但只有当事件是由li元素触发时才会执行这种方法的优势在于,即使后来动态添加了新的li元素,它们也会自动具有点击事件处理功能,无需重新绑定事件对象和常用方法事件对象属性阻止默认行为•event.type-事件类型(如click)event.preventDefault方法用于阻止元素的默认行为,如阻止链接跳转、表单提交等•event.target-触发事件的元素•event.currentTarget-绑定事件处理程序的元素$a.onclick,functionevent{event.preventDefault;•event.pageX/event.pageY-鼠标相对于文档的坐标//处理点击事件但不跳转};•event.which-按下的键码或鼠标按钮•event.data-传递给事件处理程序的数据阻止事件冒泡event.stopPropagation方法用于阻止事件向上冒泡,防止触发父元素的相同事件$.child.onclick,functionevent{event.stopPropagation;//事件不会冒泡到父元素};//完整的事件处理示例$#myButton.onclick,{name:按钮1},functionevent{//获取事件类型console.log事件类型+event.type;//获取传递的数据console.log按钮名称+event.data.name;//获取触发事件的元素console.log触发元素+event.target.id;//阻止默认行为和冒泡event.preventDefault;event.stopPropagation;};特殊事件类型1鼠标事件2键盘和表单事件•click-单击事件•keydown/keypress/keyup-键盘按下/按住/释放•dblclick-双击事件•focus/blur-获得/失去焦点(不冒泡)•mouseenter/mouseleave-鼠标进入/离开(不冒泡)•focusin/focusout-获得/失去焦点(冒泡)•mouseover/mouseout-鼠标进入/离开(冒泡)•change-值改变并失去焦点•hover-组合的mouseenter和mouseleave事件•input-值实时改变(HTML5)•submit-表单提交//hover简化写法$#element.hover function{//mouseenter$this.addClasshover;},function{//mouseleave//表单验证示例$#myForm.onsubmit,functionevent{var value$this.removeClasshover;};=$#username.val;if value.length3{alert用户名至少需要3个字符;event.preventDefault;}};自定义事件创建和触发自定义事件命名空间事件jQuery允许创建自定义事件,这对于组件间通信非常有用jQuery支持事件命名空间,使事件管理更加灵活//绑定自定义事件$#element.oncustomEvent,functionevent,param1,//绑定带命名空间的事件$#button.onclick.myPlugin,functionparam2{console.log自定义事件被触发;console.log参数1:+{console.log插件的点击事件;};//绑定另一个命名空间的相同事件param1;console.log参数2:+param2;};//触发自定义事件(不带参数)$#button.onclick.otherFeature,function{console.log其他功能$#element.triggercustomEvent;//触发自定义事件(带参数)的点击事件;};//只触发特定命名空间的事件$#element.triggercustomEvent,[值1,值2];//简写方式触发$#button.triggerclick.myPlugin;//只移除特定命名空间的事件$#element.customEvent;$#button.offclick.myPlugin;//移除所有click事件(所有命名空间)$#button.offclick;自定义事件是实现复杂交互和组件化开发的强大工具,它允许不同的代码部分通过事件机制进行通信,降低了组件间的耦合度动画简介jQuery基本显示隐藏方法/jQuery提供了多种简单的方法来显示和隐藏元素•show-显示元素•hide-隐藏元素•toggle-切换显示/隐藏状态这些方法可以接受持续时间参数(毫秒)和回调函数$#element.hide1000,function{alert元素已隐藏;};动画参数设置可以为动画设置持续时间和缓动函数•持续时间毫秒数或预设值(slow,normal,fast)•缓动函数linear或swing(默认),或使用jQuery UI提供的更多选项$#element.show{duration:1000,easing:swing,complete:function{/*动画完成后执行*/}};动画全局控制jQuery提供了全局动画设置•$.fx.speeds-定义动画持续时间预设值•$.fx.off-禁用所有动画(对性能有问题的设备有用)//自定义预设速度$.fx.speeds={slow:800,normal:400,fast:200};//禁用动画$.fx.off=true;滑动与淡入淡出滑动效果淡入淡出效果jQuery提供了一组滑动动画方法,通过改变元素的高度来实现展开和收起的效果jQuery提供了一组淡入淡出动画方法,通过改变元素的不透明度来实现显示和隐藏的效果•slideDown-向下滑动显示元素•slideUp-向上滑动隐藏元素•fadeIn-淡入显示元素•slideToggle-切换滑动状态•fadeOut-淡出隐藏元素•fadeToggle-切换淡入淡出状态//基本滑动效果$#panel.slideDown1000;//带回调的滑动效果•fadeTo-淡入淡出到指定的不透明度$#panel.slideUp500,function{console.log面板已收起;};//滑动切换$.toggle-btn.clickfunction//基本淡入效果$#element.fadeIn1000;//淡出效果{$#panel.slideToggle;};$#element.fadeOutslow;//淡入淡出切换$#element.fadeTogglefast;//淡入到指定不透明度$#element.fadeTo500,
0.5;//半透明自定义动画animate基本语法实际应用示例animate方法允许自定义几乎任何CSS属性的动画效果//基本动画$#box.animate{width:300px,height:200px,opacity:
0.8,marginLeft:50px},1000;//相对值动画$#box.animate{width:+=100px,//增加100px宽度left:-=50px//左移$selector.animate{cssProperty1:value1,cssProperty2:value2,...},duration,easing,callback;50px};//使用预定义值$#box.animate{height:toggle,//切换高度opacity:show//显示(透明度从0到1)};需要注意的是,只有数值类型的CSS属性才能实现动画效果,如width、height、margin等颜色和背景色等需要使用jQuery UI插件才能实现动画//带回调函数的复杂动画$#box.animate{width:300px,height:300px},1000,swing,function{//第一步动画完成后执行$this.animate{width:100px,height:100px,opacity:
0.5},1000;};队列动画动画队列原理jQuery的动画系统基于队列实现,默认情况下,对同一元素调用多个动画方法会将这些动画加入队列,按顺序执行队列方法jQuery提供了操作队列的方法queue、dequeue和clearQueue,用于高级动画控制自定义队列可以创建命名队列,将动画和非动画函数组合在一个序列中执行//连续动画示例(自动排队)$#box.slideUp
1000.delay500//延迟500毫秒.slideDown
1000.fadeOut
1000.fadeIn1000;//使用队列手动控制$#box.queuefunctionnext{$this.addClasshighlight;console.log添加了高亮类;next;//必须调用next继续队列}.animate{width:300px};//使用自定义队列$#box.animate{width:300px},{queue:customQueue}.animate{height:300px},{queue:customQueue}.dequeuecustomQueue;//开始执行自定义队列停止动画方法常见使用场景stopjQuery提供了stop方法用于停止正在执行的动画•用户快速重复触发动画时,防止动画堆积•用户取消操作时,中断正在进行的动画//基本语法$selector.stopclearQueue,jumpToEnd;//参数说明//clearQueue:是否清除队列中未•页面切换时,确保不会有遗留的动画继续执行执行的动画(默认false)//jumpToEnd:是否立即完成当前动画(默认false)//仅停止当前动画,保留队列$#box.stop;//停止当前动画并清空队列$#box.stoptrue;//立即完成当前动画并继续执行队列$#box.stopfalse,true;//停止所有动画并跳到最终状态$#box.stoptrue,true;在实际应用中,stop方法常用于菜单悬停效果、轮播图控制等场景,可以有效提升用户体验,避免动画叠加导致的不良效果以下是一个常见的鼠标悬停菜单示例$.menu-item.hover function{$this.find.submenu.stoptrue,true.slideDown300;},function{$this.find.submenu.stoptrue,true.slideUp300;};基础jQuery AJAX$.ajax功能最完整的AJAX方法,支持所有选项配置$.get$.ajax{url:api/data.json,type:GET,dataType:json,success:functiondata简化的GET请求方法{console.logdata;},error:functionxhr,status,error$.getapi/data.json,{id:123},{console.errorerror;}};functiondata{console.logdata;},json;$.getJSON$.post专用于获取JSON数据的简化方法简化的POST请求方法$.getJSONapi/data.json,{id:123},$.postapi/save.php,{name:张三,age:functiondata{console.logdata;};25},functionresponse{console.logresponse;};jQuery的AJAX方法大大简化了异步通信的实现,让开发者能够轻松处理服务器交互,而不必关心底层的XMLHttpRequest对象细节应用实例AJAX请求获取数据错误处理与回调GETAJAX请求可能因为网络问题、服务器错误或其他原因而失败,因此错误处理非常重要//加载用户列表function loadUsers{$.ajax{url:api/users.php,type:GET,dataType:json,beforeSend:function jQuery提供了多种回调函数来处理AJAX请求的不同阶段{$#loading.show;},success:functiondata{var html=;•beforeSend-请求发送前调用$.eachdata,functionindex,user{html+=li+user.name++user.email+/li;};$#userList.htmlhtml;},•success-请求成功时调用error:functionxhr,status,error{$#error.text获取数据失败:+•error-请求失败时调用error;},complete:function{$#loading.hide;}};}•complete-请求完成时调用(无论成功或失败)此外,还可以使用Promise风格的方法链$.ajax{url:api/data.json}.donefunctiondata{/*成功*/}.failfunctionxhr{/*失败*/}.alwaysfunction{/*完成*/};表单提交AJAX发送请求AJAX序列化表单数据阻止默认提交使用$.ajax方法发送表单数据到服务器jQuery提供了方便的方法来收集表单数据,无需手动获取每个字段首先需要阻止表单的默认提交行为,改为使用AJAX异步提交$.ajax{url:$this.attraction,type:$this.attrmethod,data://获取表单数据var formData=$this.serialize;//或者获取为对象数组var formData,success:functionresponse{$#result.html提交成功:+$#myForm.onsubmit,functionevent{event.preventDefault;//阻止表单formDataArray=$this.serializeArray;response;},error:functionxhr{$#result.html提交失败:+默认提交//AJAX提交表单};xhr.responseText;}};//完整的AJAX表单提交示例$#registrationForm.onsubmit,functionevent{event.preventDefault;var$form=$this;var formData=$form.serialize;//禁用提交按钮,防止重复提交$form.findbutton[type=submit].propdisabled,true.text提交中...;$.ajax{url:$form.attraction,type:$form.attrmethod,data:formData,dataType:json,success:functionresponse{if response.success{$#formContainer.hide;$#successMessage.show;}else{$#errorMessage.textresponse.message.show;}},error:function{$#errorMessage.text服务器错误,请稍后再试.show;},complete:function{//恢复提交按钮$form.findbutton[type=submit].propdisabled,false.text提交;}};};跨域与jsonp同源策略限制中的jQuery JSONP浏览器的同源策略禁止从一个域请求另一个域的资源同源是指相同的协议、域名和端口//使用JSONP跨域请求$.ajax{url:https://api.example.com/data,跨域请求(CORS)是指从一个域名请求另一个域名资源的过程,默认情况下是被浏览器阻止的dataType:jsonp,jsonp:callback,//指定回调参数名success:functiondata{console.logdata;}};//简化方式$.getJSON https://api.example.com/datacallback=,functiondata解决方案{console.logdata;};•JSONP(JSON withPadding)-利用script标签可以跨域的特性•CORS(Cross-Origin ResourceSharing)-服务器端设置响应头允许跨域•代理服务器-在同一域名下设置代理转发请求JSONP的工作原理是创建一个script标签,其src属性指向跨域URL,服务器返回一个包含数据的JavaScript函数调用现代Web开发中,CORS已经成为处理跨域请求的推荐方式,而JSONP主要用于兼容旧浏览器插件机制jQuery什么是插件jQueryjQuery插件是扩展jQuery功能的代码,通常以$.fn对象的方法形式提供,使开发者能够更方便地实现复杂功能获取插件插件可以从官方插件库、GitHub、npm等渠道获取,通常以.js文件形式提供,只需在引入jQuery后引入插件文件即可使用使用插件引入插件后,通常可以直接在jQuery选择器上调用插件提供的方法,如$selector.pluginName,有些插件还支持参数配置//引入jQuery和插件script src=jquery.min.js/scriptscript src=jquery.somePlugin.js/script//使用插件$document.readyfunction{//基本调用$#element.somePlugin;//带选项的调用$#element.somePlugin{option1:value1,option2:value2};//调用插件方法$#element.somePluginmethodName,arg1,arg2;};jQuery插件生态非常丰富,几乎任何常见的前端功能都能找到相应的插件,从简单的文本格式化到复杂的图表、表格和图像处理,大大减少了开发工作量常用插件介绍轮播插件表单验证日期选择器•Slick-响应式轮播,支持多种配置•Validate-强大的表单验证插件•Datepicker-jQuery UI内置日期选择•Owl Carousel-触摸友好的轮播•FormValidation-支持Bootstrap的验证•Flatpickr-轻量级日期时间选择器•bxSlider-轻量级轮播插件•Parsley-零依赖的验证插件•DateRangePicker-日期范围选择适用于图片展示、产品轮播、横幅广告等场景提供实时验证、自定义验证规则、错误提示等功能支持日期格式化、范围选择、多语言等功能//Slick轮播示例$#carousel.slick{slidesToShow:3,slidesToScroll:1,autoplay:true,dots:true,responsive:[{breakpoint:768,settings:{slidesToShow:1}}]};//Validate表单验证示例$#myForm.validate{rules:{username:{required:true,minlength:3},email:{required:true,email:true}},messages:{username:{required:请输入用户名,minlength:用户名至少3个字符}}};自定义插件开发基本插件模板进阶插件功能•支持方法调用//基本插件结构function${$.fn.myPlugin=functionoptions{//默认选项var settings=$.extend{color:blue,fontSize:16px},options;//对每个选中的元素应用插件return this.eachfunction{var$this•支持链式调用=$this;//插件功能实现$this.css{color:settings.color,fontSize:•保护$变量settings.fontSize};};};}jQuery;•防止多次初始化•支持事件回调//调用插件$#element.myPlugin{color:red,fontSize:20px};//链式调用$#element.myPlugin.cssborder,1px solidblack.text已应用插件;//支持方法调用的插件function${var methods={init:functionoptions{return this.eachfunction{var$this=$this;var data=$this.datamyPlugin;//如果插件未初始化if!data{var settings=$.extend{text:Hello World,color:blue},options;//存储插件数据$this.datamyPlugin,{target:$this,settings:settings};//应用设置$this.csscolor,settings.color.textsettings.text;}};},update:functionoptions{return this.eachfunction{var$this=$this;var data=$this.datamyPlugin;if data{$.extenddata.settings,options;$this.csscolor,data.settings.color.textdata.settings.text;}};},destroy:function{return this.eachfunction{var$this=$this;$this.removeDatamyPlugin;};}};$.fn.myPlugin=functionmethod{if methods[method]{return methods[method].applythis,Array.prototype.slice.callarguments,1;}else iftypeof method===object||!method{returnmethods.init.applythis,arguments;}else{$.error方法+method+不存在于jQuery.myPlugin;}};}jQuery;与其他库比较jQuery原生jQuery vsJavaScriptjQuery大幅简化了DOM操作和事件处理,代码更简洁,但可能增加额外的加载时间现代JavaScript(ES6+)和新的DOM API已经解决了许多早期的兼容性问题,减少了对jQuery的依赖jQuery vsReactjQuery是一个DOM操作库,而React是一个用于构建用户界面的库,基于组件化和虚拟DOMReact适合构建复杂的单页应用,而jQuery更适合为现有网站添加交互功能jQuery vsVueVue提供了反应式数据绑定和组件系统,可以构建复杂的应用,而jQuery主要关注DOM操作Vue比jQuery学习曲线更陡,但在构建现代Web应用方面提供了更好的结构和性能选择使用jQuery还是其他现代框架取决于项目需求和团队技能对于简单的网站和需要兼容旧浏览器的项目,jQuery仍然是一个不错的选择而对于复杂的单页应用或需要高性能的项目,现代框架如React、Vue或Angular可能更合适端常见应用场景PC企业后台系统表单处理jQuery在企业管理系统、CRM、ERP等后台系验证输入、动态表单字段、自动完成、日期选统中广泛应用,用于实现表单处理、数据表择器等功能,jQuery提供了简单易用的解决方格、用户交互等功能案动画与交互数据表格实现页面元素的过渡效果、折叠面板、标签使用DataTables等插件实现排序、筛选、页切换等交互功能,提升用户体验分页、导出等功能,轻松处理大量数据展示模态框与弹窗数据可视化实现各种弹出层、确认框、提示框,增强用户结合Chart.js、Highcharts等插件,实现各种交互体验,避免页面跳转图表和数据可视化效果,提升数据展示体验在PC端网站开发中,jQuery因其简单易用和丰富的插件生态,成为快速开发交互功能的得力工具特别是在企业内部系统和后台管理界面中,jQuery能够满足大部分交互需求,并且有良好的浏览器兼容性移动端兼容建议简介移动端优化建议jQuery MobilejQuery Mobile是基于jQuery的移动端框架,专为触屏设备优化,提供了一套统一的UI组件和交1性能优化互模式移动设备性能有限,应减少DOM操作频率,避免过多的动画效果,使用事件委托减少事•触摸优化的UI组件件处理程序数量•响应式设计•主题定制2触摸事件•页面转场效果使用移动端专用的触摸事件,如touchstart、touchmove、touchend,或使用封装好•各种移动端特有的事件支持的插件如TouchSwipe//jQueryMobile基本结构div data-role=page id=home div data-3响应式设计role=header h1首页/h1/div divdata-role=content p内容区域/p ahref=#page2data-role=button下一页/a/div结合媒体查询和百分比布局,确保在不同尺寸的设备上都有良好的显示效果divdata-role=footer h4页脚/h4/div/div项目案例动态表格——功能需求//加载用户数据function loadUsers{$.getJSONapi/users.php,functiondata{var html=;•显示用户数据列表$.eachdata,functionindex,user{html+=tr;html+=td+user.id+/td;html•支持添加新用户+=td+user.name+/td;html+=td+user.email+/td;html+=td;html+=button class=edit-btn data-id=+user.id+编辑/button;html+=button•支持编辑用户信息class=delete-btn data-id=+user.id+删除/button;html+=/td;html+=•支持删除用户/tr;};$#userTable tbody.htmlhtml;};}//删除用户$document.onclick,.delete-btn,•使用AJAX与后端交互function{var userId=$this.dataid;if confirm确定要删除该用户吗?{$.ajax{url:api/deleteUser.php,type:POST,data:{id:userId},success:functionresponse这种动态表格常见于后台管理系统,用于管理各类数据记录jQuery可以轻松实现表格的交互功能,结合AJAX实现无刷新操作{alert删除成功;loadUsers;//重新加载数据}};}};项目案例图片懒加载——问题背景图片密集的网页(如商品列表、图片库)如果一次性加载所有图片,会导致页面加载缓慢,影响用户体验,并浪费带宽懒加载原理只加载当前视口可见的图片,当用户滚动页面时,再加载即将进入视口的图片这种技术可以显著提高页面初始加载速度实现jQuery使用jQuery监听滚动事件,检测图片元素是否即将进入视口,然后将占位图替换为实际图片也可以使用专门的插件如LazyLoad//HTML结构img class=lazy src=placeholder.jpg data-src=actual-image.jpg alt=图片描述//jQuery懒加载实现$function{//初始检查lazyLoad;//滚动时检查$window.onscroll,lazyLoad;function lazyLoad{$.lazy.eachfunction{var$img=$this;//如果图片已经加载或不在视口附近,则跳过if$img.attrsrc===$img.datasrc||!isInViewport$img{return;}//加载实际图片$img.attrsrc,$img.datasrc;};}function isInViewport$element{var windowTop=$window.scrollTop;var windowBottom=windowTop+$window.height;var elementTop=$element.offset.top;//提前300像素加载,以确保滚动时无缝显示return elementTop=windowBottom+300;}};//使用插件(更简单的方式)$function{$.lazy.lazyload{effect:fadeIn,threshold:200};};项目案例表单数据校验——需求分析//基本验证实现$#registrationForm.onsubmit,functionevent{var isValid=true;//用户名验证var username=•实时验证用户输入$#username.val.trim;if username.length3{$#usernameError.text用户名至少需要3个字符;isValid=•显示友好的错误提示false;}else{$#usernameError.text;}//邮箱验证var email=$#email.val.trim;var emailPattern=/^[a-zA-Z0-
9._-]+@[a-zA-Z0-
9.-]+\.[a-zA-Z]{2,6}$/;if!emailPattern.testemail{$#emailError.text请输入有效的邮箱•防止无效数据提交地址;isValid=false;}else{$#emailError.text;}//密码验证var password=$#password.val;if•异步验证用户名唯一性password.length6{$#passwordError.text密码至少需要6个字符;isValid=false;}else表单验证是几乎所有Web应用的必备功能,良好的表单验证可以提高用户体验,减少服务器负担,避免无效数据{$#passwordError.text;}//阻止无效表单提交if!isValid{event.preventDefault;}};//实时用户名唯一性检查$#username.onblur,function{var username=$this.val.trim;if username.length=3{$.ajax{url:api/checkUsername.php,type:POST,data:{username:username},success:functionresponse{if response===exists{$#usernameError.text此用户名已被使用;}else{$#usernameError.text;}}};}};常见问题与解决思路选择器性能优化问题复杂选择器可能导致性能问题,特别是在元素数量多的页面解决优先使用id选择器,减少使用通用选择器,缓存jQuery对象,使用链式调用减少DOM遍历动态元素事件失效问题AJAX加载或动态创建的元素无法响应事件绑定解决使用事件委托on方法将事件绑定到父元素,而非直接绑定到动态元素冲突jQuery问题与其他使用$符号的库冲突解决使用jQuery.noConflict释放$符号控制权,使用jQuery变量或自定义变量内存泄漏问题未正确清理的事件处理程序和引用导致内存泄漏解决移除元素前先解绑事件,使用.remove而非.detach,避免循环引用//
1.选择器性能优化//不好的写法$div.content p.highlight span;//更好的写法$.highlight span;//缓存jQuery对象var$container=$#container;$container.addClassactive;$container.findp.hide;//
2.动态元素事件绑定//不好的写法-对动态添加的.item元素无效$.item.onclick,function{/*...*/};//好的写法-使用事件委托$#container.onclick,.item,function{/*...*/};//
3.解决jQuery冲突$.noConflict;jQuerydocument.readyfunction${//这里的$仍然引用jQuery};//
4.避免内存泄漏//移除元素前解绑事件$#element.off.remove;学习资源推荐官方资源•jQuery官方网站jquery.com•jQuery API文档-最权威的参考资料•jQuery学习中心-提供教程和示例在线课程•慕课网jQuery系列课程•极客学院jQuery入门到精通•哔哩哔哩jQuery视频教程实践平台•CodePen-在线代码测试平台•JSFiddle-前端代码在线调试工具•GitHub-优秀jQuery项目和插件推荐书籍•《锋利的jQuery》-入门经典,中文写作,适合国内读者•《jQuery基础教程》-系统讲解jQuery的各个方面•《jQuery实战》-通过实际案例学习jQuery应用社区资源•SegmentFault-中文技术问答社区•Stack Overflow-全球最大的程序员问答社区•掘金、CSDN-技术博客平台,有大量jQuery相关文章学习jQuery最重要的是动手实践,建议在学习过程中不断尝试编写小型项目,将所学知识应用到实际开发中遇到问题时,善于利用官方文档和社区资源寻找解决方案总结与答疑课程要点回顾常见疑问解答1基础知识jQuery是否过时?-虽然现代框架兴起,但jQuery在特定场景下仍有其价值,特别是在处理DOM操作和简单交互方面jQuery核心概念、选择器系统、DOM操作和事件处理是前端开如何提高jQuery性能?-使用高效选择器、缓存jQuery对象、减少发的重要基础DOM操作、使用事件委托等学习路径建议?-先掌握基础,再学习实际应用,最后深入插件开发和高2进阶技能级特性动画效果、AJAX通信和插件开发扩展了jQuery的应用场景,满欢迎在课后提出您的问题,我们会针对具体情况给予解答和建议同足复杂交互需求时,建议大家加入学习交流群,分享学习心得和遇到的问题3实践重要性理论学习需要结合实际项目,建议从小型功能开始练习,逐步过渡到复杂应用感谢大家参与本次jQuery教学课程!希望这些内容能够帮助您更好地理解和应用jQuery,在实际项目中发挥其价值记住,编程能力需要不断实践和探索,希望大家在前端开发的道路上取得更大的进步!。
个人认证
优秀文档
获得点赞 0