书写高质量jQuery代码

1、正确引用jQuery

   (1)、 尽量在body结束前才引入jQuery,而不是在head中。
   (2)、 借助第三方提供的CDN来引入jQuery,同时注意当使用第三方CDN出现问题时,要引入本地的jQuery文件。
   (3)、 如果在</body>前引入script文件的话,就不用写document.ready了,因为这时执行js代码时DOM已经加载
  完毕了。

   

1  <body>
2    <script type="text/javascript" src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
3    <script>
4          window.jQuery || document.write(<script type="text/javascript" src="js/jquery-1.11.1.min.js"><\/script>)
5    </script>
6 </body>

 

2.优化jQuery选择器
      

1 <div id="nav" class="nav">
2        <a class="home" href="http://jquery.com/">jQuery官网</a>
3        <a class="download" href="http://jquery.com/download//">jQuery下载</a>
4 </div>

如果我们选择class为home的a元素时,可以使用下边代码:

1 $(‘.home‘); //1
2 $(‘#nav a.home‘); //2
3 $(‘#nav‘).find(‘a.home‘); //3

方法1会使jQuery在整个DOM中查找class为home的a元素,性能可想而知。
    (1)、方法2为要查找的元素添加了上下文,在这里变为查找id为nav的子元素,查找性能得到了很大提升。
    (2)、方法3使用了find方法,它的速度更快,所以方法三最好。
    (3)、关于jQuery选择器的性能优先级,ID选择器快于元素选择器,元素选择器快于class选择器。因为ID选择器和元
素选择器是原生的JavaScript操作,而类选择器不是,大家顺便可以看下find context 区别,find() children区别。

3.缓存jQuery对象

      缓存jQuery对象可以减少不必要的DOM查找,关于这点大家可以参考下缓存jQuery对象来提高性能。


4.正确使用事件委托

  事件委托可以使事件更好的执行,在动态添加的元素上绑定事件也需要委托来实现,在新版本的jQuery中推荐大家使用
on来给元素绑定一个或多个事件的处理函数。

1 <table id="t">
2    <tr>
3         <td>单元格</td>
4    </tr>
5 </table>

 

1 $(‘#t‘).on(‘click‘, ‘td‘, function () {
2       $(this).css({ ‘color‘: ‘red‘, ‘background‘: ‘yellow‘ });
3 });


5.精简jQuery代码
      如在上述代码中我们对jQuery代码进行了适当的合并,类似的还有.attr()方法等,我们没有写成下边的方式:

1 $(‘#t‘).on(‘click‘, ‘td‘, function () {
2      $(this).css(‘color‘, ‘red‘).css(‘background‘, ‘yellow‘);
3 });


6.减少DOM操作

  刚开始使用jQuery时可能会频繁的操作DOM,这是相当耗费性能的。如我们要在body中动态输出一个表格,一些朋友
会这样写:

1 var $t = $(‘body‘);
2 $t.append(‘<table>‘);
3 $t.append(‘<tr><td>1</td></tr>‘);
4 $t.append(‘</table>‘);

好的做法:

1 $(‘body‘).append(‘<table><tr><td>1</td></tr></table>‘);


  这样在拼接完table串后再添加到body中,对DOM的操作只需一次。群里以前有朋友就因为这个导致在IE下输出时出现
问题,而关于字符串的拼接可以参考下最快创建字符串的方法。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。