jQuery技术

GBin1分享:jQuery新手技巧之“避免过多使用$(.someclass)”

字号+ 作者:H5之家 来源:H5之家 2016-01-16 14:40 我要评论( )

GBin1分享:jQuery新手技巧之“避免过多使用$(.someclass)” 日期:2011/10/08 原文: 翻译:GBin1.com 作为nettus+的编辑,我需要检阅很多的教程。尽管jQuery已经流行了很多年了。但是这里任然有一个经常能够看到的非常容易犯得错误。 样例 1 首先我们看看

GBin1分享:jQuery新手技巧之“避免过多使用$('.someclass')”

日期:2011/10/08       原文:       翻译:GBin1.com

作为nettus+的编辑,我需要检阅很多的教程。尽管jQuery已经流行了很多年了。但是这里任然有一个经常能够看到的非常容易犯得错误。

样例 1

首先我们看看如下代码:

$('.nav a').click(function() {
$(this).hide();
$(this).css('color', 'red');
$(this).show();
alert('something else');
$(this).hide();
return false;
});

以上代码因为各种原因有些过度复杂。我们这里不关心代码具体执行的功能。相反,我们关注一下所有的$(this)参考。

现在我们把DOM想象为一个水池。记得你还是个孩子的时候,你肯定会跳进池子里抓鱼。而你的父母肯定只是在旁边观看。这是一个非常好的现实中的比较。

每一次当你使用$(‘.someclass')的时候,jQuery都会跳到池子(DOM)里寻找鱼(Nodes)。因此,当你在一个函数中多次参考的时候,会造成大量的跳水动作。这样会带来大量的浪费。为什么在不需要的时候还调用jQuery呢? 你应该执行所谓的“缓存”。

$('.nav a').click(function(e) {
   var anchor = $(this);
   anchor
      .hide()
     .css('color', 'red')
     .show();
   alert('something else');
   anchor.hide();
   e.preventDefault();
});

以上代码更加简洁。虽然现代的浏览器运行的不可思议的迅速,能够最大程度的弥补你代码上的瑕疵,但是你还是应该写出更加有效的代码,避免无效的重复和浪费。现在,技术上来说,你传递给jQuery一个DOM节点,像this,他不重新查询DOM。它只是简单的返回一个jQuery对象。

样例 2

下面我们再看看稍微更复杂一些的例子:tabs

$('.tabs li').css('position', 'relative');
 
$('.tabs li').click(function() {
   $('.tabs li').removeClass('active');
   $(this).addClass('active');
   $(this).load('someHref', function() {} ); // example
   $(this).css('top', '1px');
});

代码到处都是。丑陋并且低效。第一个处理的方式就是去掉所有的CSS。你只在javascript里处理动态的CSS。例如,你需要动态得到精确的元素屏幕位置,你应该用.css('left', calculatedValue)。在上面例子中,你可以将其它的CSS都放到一个外部的CSS文件中。如下:

$('.tabs li').click(function() {
   $('.tabs li').removeClass('active');
   $(this).load('someHref', function() {} ); // example
   $(this).addClass('active);
});

下一步,为.tabs li和$(this)去掉冗余的DOM查询。我们应该使用缓存,如下:

var tabs = $('.tabs li');
 
tabs.click(function() {
   tabs.removeClass('active');
   $(this).load('someHref', function() {} ); // example
   $(this).addClass('active);
});

但是上面我们仍旧调用了$(this)俩次,虽然不是什么大问题。但是如果你不及早解决类似问题,这样的情况最后就无法解决了。

var tabs = $('.tabs li');
 
tabs.click(function() {
   var tab = $(this);
   tabs.removeClass('active');
   tab.addClass('active')
     .load('someHref', function() {} ); // example
});Filtering

另外一个方式可以使用filtering,效率会低些。

var tabs = $('.tabs li');
 
tabs.click(function() {
   tabs.removeClass('active')
       .filter(this)
       .addClass('active)
       .load('someHref', function() {} ); // example
});

这个例子稍微不同,我们不使用$(this),而使用filter()来减少列表项目到一个用来点击。

你应该学到的

没错,世界末日不会来到如果你在一个方法使用多次参考。 Javascript引擎异常快速。如果你这样做后测试性能几千次的话,执行的区别可能会到几百毫秒。但是问题在于,为什么你呢?

有时候,当我们使用很多的jQuery的功能时,我们都会忘记$('.tabs')是一个实际的方法调用了很多代码。要知道这些概念都是应用于javascript的,不是jQuery

原文来自:GBin1分享:jQuery新手技巧之“避免过多使用$('.someclass')”

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 7个有用的jQuery小技巧

    7个有用的jQuery小技巧

    2016-02-26 13:02

  • jQuery制作select双向选择列表

    jQuery制作select双向选择列表

    2016-02-26 11:00

  • 全面详细的jQuery常见开发技巧手册

    全面详细的jQuery常见开发技巧手册

    2016-02-26 10:02

  • 强大的jQuery移动插件Top 10

    强大的jQuery移动插件Top 10

    2016-02-25 09:05

网友点评
o