jQuery与原生JavaScript选择HTML元素集合用法对比分析

 更新时间:2019年11月26日 09:09:19   作者:在线疯狂  
这篇文章主要介绍了jQuery与原生JavaScript选择HTML元素集合用法,结合实例形式对比分析了jquery与原生JavaScript选择页面HTML相关操作方法、注意事项及运行效率,需要的朋友可以参考下

本文实例讲述了jQuery与原生JavaScript选择HTML元素集合用法。分享给大家供大家参考,具体如下:

通过调用document.getElementsByTagName, document.getElementsByName以及document.getElementsByClassName(部分浏览器不支持),可以返回HTMLCollection对象。表面上,它们与数组很类似,因为它们都包含length属性并且元素都可以通过[index]方式访问。然而,实际上它们并不是数组;诸如push(), slice()与sort()之类的方法不受支持。

考虑下面的HTML文档:

<body>
  <p>Paragraph 1</p>
  <p>Paragraph 2</p>
  <p>Paragraph 3</p>
</body>

我们使用原生JavaScript的getElementsByTagName方法与jQuery选择器分别获取每一个paragraph节点:

var pCollection = document.getElementsByTagName("p");
var pQuery = $("p");
console.log("pCollection.length: ", pCollection.length);
console.log("pQuery.length: ", pQuery.length);

它们都返回了相同的节点,因此集合长度都是3:

pCollection.length: 3
pQuery.length: 3

我们现在再向文档中添加一个paragraph元素,然后再观察一下集合:

// add new paragraph
var newp = document.createElement("p");
newp.appendChild(document.createTextNode("Paragraph 4"));
document.body.appendChild(newp);
// 
// display length
console.log("pCollection.length: ", pCollection.length);
console.log("pQuery.length: ", pQuery.length);

运行结果:

pCollection.length: 4
pQuery.length: 3

HTMLCollection对象是实时的(live)。它们会在相应文档发生变化时自动更新。jQuery与其他JavaScript库也使用了诸如document.getElementsByTagName()之类的方法,但是将返回的节点拷贝到一个真正的数组里面。因此,查询得到的结果反映的是文档当时的状态:而不会随着文档的变化自动更新。

两种方法各有利弊。例如,下面的代码会导致无限循环,因为HTMLCollection的长度会在<p>元素增加时自动+1:

var pCollection = document.getElementsByTagName("p");
for (var i = 0; i < pCollection.length; i++) {
  document.body.appendChild(pCollection[i].cloneNode(true));
}

有时候,相较于静态的jQuery节点集合或者重复调用选择器,使用速度更快、原生的实时HTMLCollection更合适。幸运的是,我们可以在需要时方便地将任何集合传递给jQuery,例如:

var pCollection = document.getElementsByTagName("p");
// ... add nodes, do work, etc ...
$(pCollection).addClass("myclass");

jQuery与其他库可以减少开发工作量,但是,在可能的情况下,使用原生(plain old)JavaScript,可以避免额外的文件请求与处理开销,从而写出更加高效的代码。

原文链接:http://www.sitepoint.com/javascript-vs-jquery-html-collections/

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结

希望本文所述对大家JavaScript程序设计有所帮助。

相关文章

  • javascript高级的文件目录排序代码

    javascript高级的文件目录排序代码

    这几天在做一个文件管理的模块,里面有排序的功能,产品经理看了说希望能做出更加智能的文件排序功能,就像是win7的名称排序一样,主要就是文件名中的数字会按大小排序,而不是直接按ascii码 ,这两天晚上没事,就先写了这个排序方法,下个版本中就可以用上了
    2010-08-08
  • JavaScript DOM元素常见操作详解【添加、删除、修改等】

    JavaScript DOM元素常见操作详解【添加、删除、修改等】

    这篇文章主要介绍了JavaScript DOM元素常见操作,包括针对dom元素的添加、删除、修改等相关操作实现技巧与注意事项,需要的朋友可以参考下
    2018-05-05
  • javascript深拷贝和浅拷贝详解

    javascript深拷贝和浅拷贝详解

    本文主要介绍了javascript深拷贝和浅拷贝的相关知识。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • javascript等号运算符使用详解

    javascript等号运算符使用详解

    在JavaScript中,等号由双等号(==)表示,当且仅当两个运算数相等时,它返回true。今天我们就来详细探讨下等号运算符的问题,并附上等号运算符和全等号运算符的区别分析。
    2015-04-04
  • 动态控制Table的js代码

    动态控制Table的js代码

    动态控制Table的js代码...
    2007-03-03
  • ES6中Object.assign方法使用详解

    ES6中Object.assign方法使用详解

    这篇文章主要给大家介绍了关于ES6中Object.assign方法使用的相关资料,Object.assign可以用来处理数组,但是会把数组视为对象,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-06-06
  • js鼠标滑过弹出层的定位IE6bug解决办法

    js鼠标滑过弹出层的定位IE6bug解决办法

    大家在写div+css的时候经常会用到弹出层,由于IE6的bug,所以当使用多个标签重复写弹出层的时候会遇到后面的层压在了弹出层的上面;用Jquery给弹出层的z轴依次增加高度可解决.代码很简单,效果很显著,需要了解的朋友可以参考下
    2012-12-12
  • JavaScript柯里化函数式编程面试详解

    JavaScript柯里化函数式编程面试详解

    这篇文章主要介绍了JavaScript柯里化函数式编程,JS柯里化是前端面试中最常见的问题之一,它可以让你的代码更简洁,工作更高效,感兴趣想要详细了解可以参考下文
    2023-05-05
  • js实现登录弹框

    js实现登录弹框

    这篇文章主要为大家详细介绍了js实现登录弹框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • javascript 程序库的比较(一)之DOM功能

    javascript 程序库的比较(一)之DOM功能

    javascript 程序库的比较(一)之DOM功能
    2010-04-04

最新评论