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


Posted in jQuery onNovember 26, 2019

本文实例讲述了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.3water.com/code/HtmlJsRun测试上述代码运行效果。

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

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

jQuery 相关文章推荐
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
Mar 23 jQuery
jQuery输入框密码的显示隐藏【代码分享】
Apr 29 jQuery
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
May 13 jQuery
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 jQuery
基于jquery实现五星好评
Nov 18 jQuery
利用jquery如何从json中读取数据追加到html中
Dec 01 jQuery
基于jquery.page.js实现分页效果
Jan 01 jQuery
jQuery+ajax读取json数据并按照价格排序示例
Mar 28 jQuery
jQuery实现遍历XML节点和属性的方法示例
Apr 29 jQuery
jquery.pager.js分页实现详解
Jul 29 jQuery
Jquery 动态添加元素并添加点击事件实现过程解析
Oct 12 jQuery
Jquery如何使用animation动画效果改变背景色的代码
Jul 20 jQuery
高效jQuery选择器的5个技巧实例分析
Nov 26 #jQuery
jquery使用echarts实现有向图可视化功能示例
Nov 25 #jQuery
jQuery Raty星级评分插件使用方法实例分析
Nov 25 #jQuery
jquery 插件重新绑定的处理方法分析
Nov 23 #jQuery
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
Nov 18 #jQuery
Jquery让form表单异步提交代码实现
Nov 14 #jQuery
JQuery发送ajax请求时中文乱码问题解决
Nov 14 #jQuery
You might like
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
Apache无法自动跳转却显示目录的解决方法
2020/11/30 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
提高Laravel应用性能方法详解
2019/06/24 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
jQuery 扩展对input的一些操作方法
2009/10/30 Javascript
Javascript insertAfter() 实现函数代码
2011/10/12 Javascript
jQuery实现跨域iframe接口方法调用
2015/03/14 Javascript
JavaScript列表框listbox全选和反选的实现方法
2015/03/18 Javascript
js鼠标点击图片切换效果代码分享
2015/08/26 Javascript
JS实现的鼠标跟随代码(卡通手型点击效果)
2015/10/26 Javascript
jQuery实现遍历复选框的方法示例
2017/03/06 Javascript
Bootstrap页面标题Page Header的实现方法
2017/03/22 Javascript
js实现手机web图片左右滑动效果
2017/12/29 Javascript
页面内锚点定位及跳转方法总结(推荐)
2019/04/24 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
原生JavaScript实现轮播图
2021/01/10 Javascript
[40:27]完美世界DOTA2联赛PWL S3 PXG vs GXR 第一场 12.19
2020/12/24 DOTA
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
浅谈Python爬取网页的编码处理
2016/11/04 Python
一张图带我们入门Python基础教程
2017/02/05 Python
手把手教你python实现SVM算法
2017/12/27 Python
python批量获取html内body内容的实例
2019/01/02 Python
python-numpy-指数分布实例详解
2019/12/07 Python
Python爬虫之Selenium鼠标事件的实现
2020/12/04 Python
python 解决函数返回return的问题
2020/12/05 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
创新型城市实施方案
2014/03/06 职场文书
做人民满意的公务员活动方案
2014/08/25 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
2014年扫黄打非工作总结
2014/12/03 职场文书
学校国庆节活动总结
2015/03/23 职场文书
食品质检员岗位职责
2015/04/08 职场文书
服装区域经理岗位职责
2015/04/10 职场文书
办公室岗位职责范本
2015/04/11 职场文书