jQuery函数的等价原生函数

系统 1758 0

原文: http://www.leebrimelow.com/native-methods-jquery/

不太重要的没翻译= =

 

我们针对常用的jQuery方法以及其等价原生方法的性能做了一些测试( 1 2 3 )。

我知道你在想什么。原生方法明显要比jQuery方法快,因为jQuery方法要处理浏览器兼容以及其他一些事情。是的,我完全赞成。写这篇文章并不是出于反对使用jQuery,但如果你针对的是现代浏览器,那么使用原生方法会使性能有很大的提升。

许多开发者没有意识到大多数他们使用的jQuery方法可以使用原生方法,或者更轻量级的方法来代替。下面是一些代码示例,展示一些常用的jQuery方法,以及其等价原生方法。

译者注:需要注意下面有些原生方法是HTML5引入的,部分浏览器可能不能使用。

选择器

jQuery的核心之一就是能非常方便的取到DOM元素。我们只需输入CSS选择字符串,便可以得到匹配的元素。但在大多数情况下,我们可以用简单的原生代码达到同样的效果。

      
        //
      
      
        ----得到页面的所有div--------- 
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        
  $(
      
      "div"
      
        )
 
  
      
      
        /*
      
      
         原生 
      
      
        */
      
      
        
  document.getElementsByTagName(
      
      "div"
      
        ) 
 
  
      
      
        //
      
      
        ----得到所有指定class的元素--------- 
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
         
  $(
      
      ".my-class"
      
        )
 
  
      
      
        /*
      
      
         原生 
      
      
        */
      
      
        
  document.querySelectorAll(
      
      ".my-class"
      
        )
 
  
      
      
        /*
      
      
         更快的原生方法 
      
      
        */
      
      
        
  document.getElementsByClassName(
      
      "my-class"
      
        ) 
 
  
      
      
        //
      
      
        ----通过CSS选择得到元素---------- 
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        
  $(
      
      ".my-class li:first-child"
      
        )
 
  
      
      
        /*
      
      
         原生 
      
      
        */
      
      
        
  document.querySelectorAll(
      
      ".my-class li:first-child"
      
        ) 
 
  
      
      
        //
      
      
        ----得到指定clsss的第一个元素----
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        
  $(
      
      ".my-class").get(0
      
        )
 
  
      
      
        /*
      
      
         原生 
      
      
        */
      
      
        
  document.querySelector(
      
      ".my-class")
    

 译者注:其实这里面是有些问题的,document.querySelectorAll和jQuery选择器还是有区别的,前者返回的是一个NodeList,而后者返回的是一个类数组对象。

 

DOM操作

jQuery还在DOM操作上频繁使用,例如插入或者删除元素。我们也可以使用原生方法来进行这些操作,你会发现这需要写额外的代码,当然也可以写自己的辅助函数来让使用起来更容易。下面是一些将元素插入到页面中的例子。

      
        //
      
      
        ----插入元素----
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        
  $(document.body).append(
      
      "<div id='myDiv'><img src='im.gif'/></div>"
      
        );
 
  
      
      
        /*
      
      
         蹩脚的原生方法 
      
      
        */
      
      
        
  document.body.innerHTML 
      
      += "<div id='myDiv'><img src='im.gif'/></div>"
      
        ;
 
  
      
      
        /*
      
      
         更好的原生方法 
      
      
        */
      
      
        var
      
       frag =
      
         document.createDocumentFragment();
 
  
      
      
        var
      
       myDiv = document.createElement("div"
      
        );
  myDiv.id 
      
      = "myDiv"
      
        ;
 
  
      
      
        var
      
       im = document.createElement("img"
      
        );
  im.src 
      
      = "im.gif"
      
        ;
 
  myDiv.appendChild(im);
  frag.appendChild(myDiv);
 
  document.body.appendChild(frag);
 
  
      
      
        //
      
      
        ----前置元素----
      
      
        //
      
      
         除了最后一行
      
      
  document.body.insertBefore(frag, document.body.firstChild);
    

 

CSS classes

在jQuery中,我们可以很容易对DOM元素添加、删除、检查它的CSS class。幸运的是,利用原生方法也可以简单的办到。

      
        //
      
      
         得到DOM元素的引用
      
      
        var
      
       el = document.querySelector(".main-content"
      
        );
 
  
      
      
        //
      
      
        ----添加class------
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        
  $(el).addClass(
      
      "someClass"
      
        );
 
  
      
      
        /*
      
      
         原生方法 
      
      
        */
      
      
        
  el.classList.add(
      
      "someClass"
      
        );
 
  
      
      
        //
      
      
        ----删除class-----
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        
  $(el).removeClass(
      
      "someClass"
      
        );
 
  
      
      
        /*
      
      
         原生方法 
      
      
        */
      
      
        
  el.classList.remove(
      
      "someClass"
      
        );
 
  
      
      
        //
      
      
        ----是否是该class---
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        if
      
      ($(el).hasClass("someClass"
      
        ))
 
  
      
      
        /*
      
      
         原生方法 
      
      
        */
      
      
        if
      
      (el.classList.contains("someClass"))
    

 

修改CSS属性

总是通过Javascript修改和检索CSS属性,这样会比使用jQuery CSS函数更加简单快速,并且没有任何不必要的代码。

      
        //
      
      
         得到DOM元素引用
      
      
        var
      
       el = document.querySelector(".main-content"
      
        );
 
  
      
      
        //
      
      
        ----设置CSS属性----
      
      
        /*
      
      
         jQuery 
      
      
        */
      
      
        
  $(el).css({
    background: 
      
      "#FF0000"
      
        ,
    
      
      "box-shadow": "1px 1px 5px 5px red"
      
        ,
    width: 
      
      "100px"
      
        ,
    height: 
      
      "100px"
      
        ,
    display: 
      
      "block"
      
        
  });
 
  
      
      
        /*
      
      
         原生 
      
      
        */
      
      
        
  el.style.background 
      
      = "#FF0000"
      
        ;
  el.style.width 
      
      = "100px"
      
        ;
  el.style.height 
      
      = "100px"
      
        ;
  el.style.display 
      
      = "block"
      
        ;
  el.style.boxShadow 
      
      = "1px 1px 5px 5px red";
    

 

jQuery函数的等价原生函数


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论