前端程序员应该知道的 15 个 jQuery 小技巧

下面这些简单的小技巧能够帮助你玩转jQuery。

  • 返回顶部按钮
  • 预加载图像
  • 检查图像是否加载
  • 自动修复破坏的图像
  • 悬停切换类
  • 禁用输入字段
  • 停止加载链接
  • 切换淡入/幻灯片
  • 简单的手风琴
  • 让两个div高度相同
  • 在新标签页/窗口打开外部链接
  • 通过文本查找元素
  • 在改变visibility时触发
  • AJAX调用错误处理
  • 链式插件调用

通过使用jQuery中的animate 和scrollTop 方法,不用插件就可以创建一个滚动到顶部的简单动画:


  1. // Back to top 
  2. $('.top').click(function (e) { 
  3.   e.preventDefault(); 
  4.   $('html, body').animate({scrollTop: 0}, 800); 
  5. }); 
  6.  
  7. <!-- Create an anchor tag --> 
  8. <a class="top" href="#">Back to top</a> 

改变scrollTop 的值可以更改你想要放置滚动条的位置。所有你真正需要做的是在800毫秒的时间内设置文档主体的动画,直到它滚动到文档的顶部。

注:小心scrollTop的一些错误行为。

预加载图像

如果你的网页要使用大量开始不可见的(例如,悬停的)图像,那么可以预加载这些图像:


  1. $.preloadImages = function () { 
  2.   for (var i = 0; i < arguments.length; i++) { 
  3.     $('<img>').attr('src', arguments[i]); 
  4.   } 
  5. }; 
  6.  
  7. $.preloadImages('img/hover-on.png', 'img/hover-off.png'); 

检查图像是否加载

有时为了继续脚本,你可能需要检查图像是否全部加载完毕:


  1. $('img').load(function () { 
  2.   console.log('image load successful'); 
  3. }); 

你也可以用ID或类替换<img>标签来检查某个特定的图像是否被加载。

自动修复破坏的图像

逐个替换已经破坏的图像链接是非常痛苦的。不过,下面这段简单的代码可以帮助你:


  1. $('img').on('error', function () { 
  2.   if(!$(this).hasClass('broken-image')) { 
  3.     $(this).prop('src', 'img/broken.png').addClass('broken-image'); 
  4.   } 
  5. }); 

即使没有任何断掉的链接,加上这一段代码也不会让你有任何损失。

悬停切换类

假设你希望当用户将鼠标悬停在可点击的元素上时,它会改变颜色。那么你可以在用户悬停的时候添加类到元素中,反之则删除类:


  1. $('.btn').hover(function () { 
  2.   $(this).addClass('hover'); 
  3. }, function () { 
  4.   $(this).removeClass('hover'); 
  5. }); 

你只需要添加必要的CSS即可。更简单的方法是使用toggleClass 方法:


  1. $('.btn').hover(function () { 
  2.   $(this).toggleClass('hover'); 
  3. }); 

注:可能在这种情况下,CSS这种解决方案更快,不过了解这个方法很有必要。

禁用输入字段

有时候,你可能想要禁用表格的提交按钮或它的某一项文字输入直到用户执行了特定操作(例如,勾选“我已阅读相关条款”复选框)。添加 disabled属性到你的输入就可以在你想要的时候才启用它:


  1. $('input[type="submit"]').prop('disabled', true); 

然后你只需要运行输入的prop 方法就可以了,不过disabled 的值要设置为false:


  1. $('input[type="submit"]').prop('disabled', false); 

停止加载链接

有时候,你既不需要链接到某个特定的网页,也不想要重新加载页面——你可能希望链接做点别的事情,例如说触发一些其他脚本。这就要在阻止默认动作上做文章了:


  1. $('a.no-link').click(function (e) { 
  2.   e.preventDefault(); 
  3. }); 

淡入/滑动切换

滑动和淡入都是我们用jQuery做动画的时候大量运用的东西。如果你只是想在用户点击之后展示一个元素的话,那么用fadeIn 和slideDown 方法就很完美。但是,如果你想要元素在第一次点击的时候出现,然后在第二次点击的时候消失的话,那么可以试试下面的代码:


  1. // Fade 
  2. $('.btn').click(function () { 
  3.   $('.element').fadeToggle('slow'); 
  4. }); 
  5.  
  6. // Toggle 
  7. $('.btn').click(function () { 
  8.   $('.element').slideToggle('slow'); 
  9. }); 

简单的手风琴

这是一个可快速生成手风琴的简单方法:


  1. // Close all panels 
  2. $('#accordion').find('.content').hide(); 
  3.  
  4. // Accordion 
  5. $('#accordion').find('.accordion-header').click(function () { 
  6.   var next = $(this).next(); 
  7.   next.slideToggle('fast'); 
  8.   $('.content').not(next).slideUp('fast'); 
  9.   return false; 
  10. }); 

通过添加这个脚本,你真正需要做的仅仅是在页面上添加必要的HTML元素,这样它就可以运行工作了。

让两个div高度相同

有时候,你需要让两个div无论包含什么内容都拥有相同的高度:


  1. $('.div').css('min-height', $('.main-div').height()); 

设置 min-height,这意味着它可以比主div大但绝对不能比主div小。不过,还有一种更灵活的方法是遍历一组元素,然后将高度设置为最高的那个元素的高度:


  1. var $columns = $('.column'); 
  2. var height = 0; 
  3. $columns.each(function () { 
  4.   if ($(this).height() > height) { 
  5.     height = $(this).height(); 
  6.   } 
  7. }); 
  8. $columns.height(height); 

如果你希望所有列的高度相同:


  1. var $rows = $('.same-height-columns'); 
  2. $rows.each(function () { 
  3.   $(this).find('.column').height($(this).height()); 
  4. }); 

在新标签页/窗口打开外部链接

在一个新的浏览器tab或窗口中打开外部链接,并确保同一个来源的链接能在同一个tab或者窗口中打开:


  1. $('a[href^="http"]').attr('target', '_blank'); 
  2. $('a[href^="//"]').attr('target', '_blank'); 
  3. $('a[href^="' + window.location.origin + '"]').attr('target', '_self'); 

注意:window.location.origin 在IE10中无效。修复的时候要小心这个问题。

通过文本查找元素

通过使用jQuery中的contains() 选择器,你可以找到元素内容的文本。如果文本不存在,那就隐藏该元素:


  1. var search = $('#search').val(); 
  2. $('div:not(:contains("' + search + '"))').hide(); 

在改变Visibility时触发

当用户不再关注某个tab,或重新聚焦原来的那个tab上时,触发JavaScript:


  1. $(document).on('visibilitychange', function (e) { 
  2.   if (e.target.visibilityState === "visible") { 
  3.     console.log('Tab is now in view!'); 
  4.   } else if (e.target.visibilityState === "hidden") { 
  5.     console.log('Tab is now hidden!'); 
  6.   } 
  7. }); 

AJAX调用错误处理

当Ajax调用返回404或500错误时,就执行错误处理程序。如果没有定义处理程序,其他的jQuery代码或会就此罢工。定义一个全局的Ajax错误处理程序:


  1. $(document).ajaxError(function (e, xhr, settings, error) { 
  2.   console.log(error); 
  3. }); 

链式插件调用

jQuery允许“链式”插件的方法调用,以减轻反复查询DOM并创建多个jQuery对象的过程。比方说,下面的代码片段代表了你的插件方法调用:


  1. $('#elem').show(); 
  2. $('#elem').html('bla'); 
  3. $('#elem').otherStuff(); 

通过使用链式,可以大大改善:


  1. $('#elem') 
  2.   .show() 
  3.   .html('bla') 
  4.   .otherStuff(); 

还有一种方法是在(前缀$)变量中高速缓存元素:


  1. var $elem = $('#elem'); 
  2. $elem.hide(); 
  3. $elem.html('bla'); 
  4. $elem.otherStuff(); 

链式和高速缓存的方法都是jQuery中可以让代码变得更短和更快的代最佳做法。

作者:小峰

来源:51CTO

时间: 2024-12-08 02:18:05

前端程序员应该知道的 15 个 jQuery 小技巧的相关文章

做一个优秀程序员应该知道的15件事_其它综合

1. 懂得分享.尽可能使用开源,并且当你有能力的时候,要对其有所贡献.聚全社会之智慧,胜过某些"大"公司之短视. 2. 公平竞争.尝试其他技术.框架.方法和观点.不要总以为只有你的选择才是可行的.别的选择也有可能比你的要强得多.要以开放的心态,来检验其他人的选择. 3. 不要攻击他人.像第2条所说的,不要仅仅因为别人恰巧使用.Net.Java或PHP就去攻击他们(我在这方面有一次教训).有时,它们或许要比你所认为的更有效.只要别人不是一无是处,你就可以从他们那里学到很多东西. 4. 自

PHP 开发者该知道的 5 个 Composer 小技巧_php技巧

Composer 是新一代的PHP依赖管理工具.其介绍和基本用法可以看这篇<Composer PHP依赖管理的新时代>.本文介绍使用Composer的五个小技巧,希望能给你的PHP开发带来方便. 1. 仅更新单个库 只想更新某个特定的库,不想更新它的所有依赖,很简单: composer update foo/bar 此外,这个技巧还可以用来解决"警告信息问题".你一定见过这样的警告信息: Warning: The lock file is not up to date wi

JavaScript程序员应该知道的45个实用技巧

 在这篇文章中,我将分享一组JavaScript的技巧.窍门和最佳实践,这些都是JavaScript程序员应该知晓的,不管他们是使用在浏览器/引擎上,还是服务器端(SSJS--Service Side JavaScript)JavaScript解释器上 如你所知,JavaScript是世界上第一的编程语言,它是Web的语言,是移动混合应用(mobile hybrid apps)的语言(比如PhoneGap或者Appcelerator),是服务器端的语言(比如NodeJS或者Wakanda),并且

20 件程序员必须知道的事

我最近看了一本叫做<the 97 Things a Programmer Should Know>的书.书是一本好书.不过,下面我将我认为最值得我们了解的 20 件事情列举给大家: 1 . 应用函数式编程原则 引用透明性是一个非常可取的特性.这意味着,不论何时调用它,对于同一组参数它永远给出同样的结果,这使它跟那些与其他系统相互交织的东西比起来更易于使用. 2 . 从用户的角度看问题 你不是用户.不要把你的想法强加到用户头上,每个人的想法都不尽相同.花一个小时去观察用户的行为比你花上一天的时间

Java程序员应当知道的10个面向对象设计原则

(设计原则)底线是永远追求高内聚.低耦合的编码或设计. Apache 和 Sun的开源代码是学习Java和OOPS设计原则的良好范例.它们向我们展示了,设计原则在Java编程中是如何使用的.Java JDK 使用了一些设计原则:BorderFactory类中的工厂模式.Runtime类中的单例模式.java.io 类中的装饰器模式.顺便说一句,如果您真的对Java编码原则感兴趣,请阅读Joshua Bloch 的Effective Java,他编写过Java API.我个人最喜欢的关于面向对象设

前端程序员必知的30个Chrome扩展

谷歌Chrome浏览器是网络上可用的最好的浏览器之一,并且自2011年11月超越了Firefox浏览器之后,已经成为了互联网上占主导地位的浏览器.今天,我想与大家分享一些最实用的谷歌Chrome浏览器扩展,可以帮助你提高工作效率. Devtools Terminal --浏览器终端.牛逼的不得了! LiveReload--为官方LiveReload应用程序(Mac和Windows)和第三方,例如guard-livereload和yeoman,提供Chrome浏览器集成. BrowserStack

Java程序员应该知道的10个调试技巧

调试可以帮助识别和解决应用程序缺陷,在本文中,作者将使用大家常用的的开发工具Eclipse来调试Java应用程序.但这里介绍的调试方法基本都是通用的,也适用于NetBeans IDE,我们会把重点放在运行时上面. 在开始之前,推荐大家去看看Eclipse shortcuts这篇文章,它将会给你带来很多方便.在本文中使用的是Eclipse Juno版(Eclipse 4.2),在开始前给大家提3点建议! 1.不要使用System.out.println作为调试工具 2.把所有涉及到的组件日志级别激

JavaScript程序员应该知道的45个实用技巧_javascript技巧

如你所知,JavaScript是世界上第一的编程语言,它是Web的语言,是移动混合应用(mobile hybrid apps)的语言(比如PhoneGap或者Appcelerator),是服务器端的语言(比如NodeJS或者Wakanda),并且拥有很多其他的实现.同时它也是很多新手的启蒙语言,因为它不但可以在浏览器上显示一个简单的alert信息,而且还可以用来控制一个机器人(使用nodebot,或者nodruino).掌握JavaScript并且能够写出组织规范并性能高效的代码的开发人员,已经

JAVA程序员应该知道的linux命令

常用命令 1.在compose Bar下可以对多个服务器同时进行操作.选择To All Sessions 2. 查看JAVA进程: ps -ef | grep java ps auxf | grep java 3.杀死JAVA进程: pkill java (在有反串改的时候可以用,杀死所有java进程) kill -9 进程ID ps -ef | grep "Dcatalina.base=/usr/oa/appserver" | grep -v "grep" | a