整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

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

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

、返回顶部按钮

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

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

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

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

2、预加载图像

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

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

3、检查图像是否加载

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

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

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

4、自动修复破坏的图像

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

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


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

5、悬停切换类

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

$('.btn').hover(function () {$(this).addClass('hover');}, function () {$(this).removeClass('hover');});

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

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

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

6、禁用输入字段

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

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

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

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

7、停止加载链接

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

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

8、淡入/滑动切换

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

// Fade$('.btn').click(function () {$('.element').fadeToggle('slow');});// Toggle$('.btn').click(function () {$('.element').slideToggle('slow');});

9、简单的手风琴

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

// Close all panels$('#accordion').find('.content').hide();// Accordion$('#accordion').find('.accordion-header').click(function () {var next=$(this).next();next.slideToggle('fast');$('.content').not(next).slideUp('fast');return false;});

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

10、让两个div高度相同

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

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

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

var $columns=$('.column');var height=0;$columns.each(function () {if ($(this).height() > height) {height=$(this).height();}});$columns.height(height);

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

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

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

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

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

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

12、通过文本查找元素

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

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

13、在改变Visibility时触发

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

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

14、AJAX调用错误处理

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

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

15、链式插件调用

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

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

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

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

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

var $elem=$('#elem');$elem.hide();$elem.html('bla');$elem.otherStuff();

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


最后,我自己是一名从事了多年开发的Java老程序员,辞职目前在做自己的Java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,可以送给每一位喜欢Java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。

面我们从几方面对两款框架进行了对比评测,帮助你了解 Kendo UI 和 jQuery Mobile 在相同的业务领域里之间的差异。

依据支持的平台市场的定位来区分

jQuery Mobile 和Kendo UI 在方向上是有一点不同的。Kendo UI 将它本身定位成为:"当代web和手机app开发所需的综合 HTML5/JavaScript 框架。Telerik's Kendo UI是每一位需要创建HTML5站点和手机apps的专业开发人员所需要的。如今,HTML/jQuery 开发人员的生产效率受困于将那些毫不相干的JavaScript 库和插件构成一个"弗兰肯斯坦"(ps:一个电影的人名)。Kendo UI 却拥有全部:丰富的jQuery的窗体部件,简单并且始终如一的程序接口、稳定可靠的数据源、验证、国际化、MVVM框架、主题、模板等等一系列"。

jQuery Mobile将它本身定位为:"jQuery Mobile:智能机和平板上触摸体验最好的Web Framework。一个统一的,以HTML5为基础的面向所有流行的手机设备平台的用户接口系统,构建在稳定可靠的jQuery和jQuery UI 上。它的轻量级代码逐渐增强并且拥有灵活自由,容易的主题设计...."。

Kendo UI

Kendo UI扩展支持了所有受欢迎的移动平台上的顶级HTML桌面浏览器,支持全球几乎所有受欢迎的移动平台,而且是一次性交付的,不需要针对每个平台都去构建一次。

jQuery Mobile

这个框架没有将自己定位到任何解决HTML 框架的Web开发者所需要的战略。强有力的支持所有有名的桌面浏览器和移动平台,因此有时会产生更多问题。

用户界面与视觉印象的不同

界面外观是值得讨论的重要方面,两个框架在这一方面又是非常贴近。假如你需要与自己的应用程序保持平台一致性,那么建议选用 jQuery Mobile,因为它使用了平台无关的用户界面。UI 中包含了大量的组件,它们被快速响应,并受到大量第三方的鼎力支持。

如果你从视觉美观角度考虑这两个框架,那么 Kendo UI 比 jQuery Mobile 超出更多,因为 Kendo UI 中有多种主题可以适合各种场景,而 jQuery Mobile 仅有一个主题,用于所有样本块。至于 Kendo UI,布局设计与 jQuery Mobile 非常相似,但只要你更仔细的观察两者,就可以分辨出不同。如果你希望从 jQuery Mobile 切换到 Kendo UI 或者反过来,是非常快的,你无须担心,因为你可以很快就轻松地创建出复杂的用户界面设计。

Kendo UI

  • 拥有丰富的UI组件

  • 在iOS中,外观和感觉具有更好的原生体验

  • 如果你需要在不通的平台上体现独特的外观的感觉,有许多主题供选择

  • 在所有的移动设备上均有很好的UI性能,在所有的动画转换上能产生原生的感觉。但性能会随着布局的复杂度提升而有所降低。

jQuery Mobile

  • 这个框架有相同的用户接口,不区分你工作的平台

  • UI看起来更像iOS

  • 有许多内置组件,并且有大量的第三方插件

  • jQuery Mobile和Kendo UI相比,在不同的分辨率和CCS方面,有更好的页面响应性

  • 和Kendo UI一样,你能很方便的修改UI

  • 如果在性能方面比较jQuery Mobile和Kendo UI,有时应用程序将变得完全失效,因为jQuery在移动设备上会遇到许多麻烦。

赢家:在这个方面Kendo UI胜出,因为它有更好的移动性能

在易用性和可用性上的区别

我们在这方面区别二者的第一个观点也将是一个非常接近的结果,因为 Kendo UI 和jQuery Mobile都是标记驱动的框架,他们都依赖于jQuery使其易于使用和发挥。很不幸的是,jQuery Mobile 并没有优化以支持MVC(模型-视图-控制器)架构,而 Kendo UI 则是建立在MVC架构上。

Kendo UI

  • 虽然JavaScript语法与jQuery语法比较不同,但这个框架也易于使用

  • 你可以修改widgets,还可用丰富的主题改变应用的外观

  • 支持 MVC

jQuery Mobile

  • JavaScript的语法和标准jQuery相似,使它易于无缝使用

  • 虽然不支持MVC,但你能通过 Knockout.js 或 Backbone.js 来解决这个极佳的主题支持

  • 你不需要任何IDE来构建移动Web应用程序

赢家: Kendo UI 在这方面胜出,因为它支持 MVC

综上所述,jQuery Mobile更多提到移动端的使用,而Kendo UI是一个混合的 jQuery 用户接口,jQuery Mobile则更倾向服务器端支持。在界面的丰富性和UI性能上,Kendo UI更胜一筹。在易用性上,jQuery Mobile和Kendo UI都基于jQuery,所以非常便于操作,但Kendo UI支持MVC架构,而jQuery Mobile不支持。

创: zzz

一、ajax的简介

Ajax被认为是(Asynchronous(异步) JavaScript And Xml的缩写)。现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax.

同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。

异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式 。

二、ajax的缺陷

AJAX大量使用了JavaScript和AJAX引擎,而这个取决于浏览器的支持。IE5.0及以上、Mozilla1.0、NetScape7及以上版本才支持,Mozilla虽然也支持AJAX,但是提供XMLHttpRequest的方式不一样。所以,使用AJAX的程序必须测试针对各个浏览器的兼容性。

AJAX更新页面内容的时候并没有刷新整个页面,因此,网页的后退功能是失效的;有的用户还经常搞不清楚现在的数据是旧的还是已经更新过的。这个就需要在明显位置提醒用户“数据已更新”。

对流媒体的支持没有FLASH好。

一些手持设备(如手机、PDA等)现在还不能很好的支持Ajax。

三、ajax的四种type类型:

1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。

2、与GET不同的是,PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。

3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会改变数据的种类等资源,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。

4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作。

简单的说就是

get理解为查询 delete就是删除 post就是新增 put就是更新数据

四、ajax的原生写法

window.onload=function () {
 var oBtn=document.getElementById("btn1");
 oBtn.onclick=function () {
 //1.创建ajax对象
 //只兼容非ie6的浏览器,在ie6浏览器上运行会提示没有被定义
 //var oAjax=new XMLHttpRequest();//这才是ajax实际的请求
 //alert(oAjax);
 //ie6浏览器下按照下面方法写,但是在别的浏览器中不能用,会报错。
 //var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
 //alert(oAjax);
 //鉴于上面出现的问题,可以采取下面的方法解决,用if判断是否为IE6浏览器
 if (window.XMLHttpRequest)//如果有XMLHttpRequest,那就是非IE6浏览器。()里面加window的原因下面会有描述。
 {
 var oAjax=new XMLHttpRequest();//创建ajax对象
 }
 else//如果没有XMLHttpRequest,那就是IE6浏览器
 {
 var oAjax=new ActiveXObject("Microsoft.XMLHTTP");//IE6浏览器创建ajax对象
 }
 //2.连接服务器
 //open(方法、文件名、异步传输)
 //方法:
 //传输方式是get方式还是post方式。
 //文件名
 //告诉服务器要读哪个文件
 //异步传输
 //异步:多件事一件一件的做
 //同步:多件事情一起进行
 //但是js里面的同步和异步和现实的同步异步相反。
 //同步:多件事一件一件的做
 //异步:多件事情一起进行
 //ajax天生是用来做异步的
 oAjax.open("GET", "a.txt?t='+new Date().getTime()", true);//加上t='+new Date().getTime()"的目的是为了消除缓存,每次的t的值不一样。
 //3.发送请求
 oAjax.send();
 //4.接收返回
 //客户端和服务器端有交互的时候会调用onreadystatechange
 oAjax.onreadystatechange=function () {
 //oAjax.readyState //浏览器和服务器,进行到哪一步了。
 //0->(未初始化):还没有调用 open() 方法。
 //1->(载入):已调用 send() 方法,正在发送请求。
 //2->载入完成):send() 方法完成,已收到全部响应内容。
 //3->(解析):正在解析响应内容。
 //4->(完成):响应内容解析完成,可以在客户端调用。
 if (oAjax.readyState==4) {
 if (oAjax.status==200)//判断是否成功,如果是200,就代表成功
 {
 alert("成功" + oAjax.responseText);//读取a.txt文件成功就弹出成功。后面加上oAjax.responseText会输出a.txt文本的内容
 }
 else {
 alert("失败");
 }
 }
 };
 }
};

五、ajax的jquery写法:

$.ajax({
 url: "http://www.microsoft.com", //请求的url地址
 dataType: "json", //返回格式为json
 async: true, //请求是否异步,默认为异步,这也是ajax重要特性
 data: {
 "id": "value"
 }, //参数值
 type: "GET", //请求方式
 processData: false, //对表单data数据是否进行序列化
 contentType: false, //dataType设置你收到服务器数据的格式
 xhr: function () { //ajax进度条
 var xhr=$.ajaxSettings.xhr();
 if (onprogress && xhr.upload) {
 xhr.upload.addEventListener("progress", progressBar, false);
 return xhr;
 }
 },
 beforeSend: function () {
 //请求前的处理
 },
 success: function (req) {
 //请求成功时处理
 },
 complete: function () {
 //请求完成的处理
 },
 error: function () {
 //请求出错处理
 }
});

当然,jquery还有很多简单变形的写法。


最后,我自己是一名从事了多年开发的Java老程序员,辞职目前在做自己的Java私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Java学习干货,可以送给每一位喜欢Java的小伙伴,想要获取的可以关注我的头条号并在后台私信我:01,即可免费获取。