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实现的动态文字变化输出效果示例【附演示与demo源码下载】
Mar 24 jQuery
jQuery实现鼠标滑过预览图片大图效果的方法
Apr 26 jQuery
jquery.masonry瀑布流效果
May 25 jQuery
jquery Ajax实现Select动态添加数据
Jun 08 jQuery
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
jQuery实现火车票买票城市选择切换功能
Sep 15 jQuery
基于jquery.page.js实现分页效果
Jan 01 jQuery
JQuery中queue方法用法示例
Jan 31 jQuery
jQuery实现ajax的嵌套请求案例分析
Feb 16 jQuery
jquery登录的异步验证操作示例
May 09 jQuery
使用异步controller与jQuery实现卷帘式分页
Jun 18 jQuery
jquery制作的移动端购物车效果完整示例
Feb 24 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 preg_replace替换实例讲解
2013/11/04 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
Zend Framework数据库操作方法实例总结
2016/12/11 PHP
Laravel如何实现自动加载类
2019/10/14 PHP
Javascript 获取字符串字节数的多种方法
2009/06/02 Javascript
JavaScript高级程序设计 阅读笔记(七) ECMAScript中的语句
2012/02/27 Javascript
js与jquery获取父级元素,子级元素,兄弟元素的实现方法
2014/01/09 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
自己封装的常用javascript函数分享
2015/01/07 Javascript
javascript表格隔行变色加鼠标移入移出及点击效果的方法
2015/04/10 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
2016/05/20 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
jquery实现图片上传前本地预览
2017/04/28 jQuery
vue增删改查的简单操作
2017/07/15 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
解决layui数据表格Date日期格式的回显Object的问题
2019/09/19 Javascript
使用p5.js临摹动态图形
2019/10/23 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
js实现手表表盘时钟与圆周运动
2020/09/18 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
[02:38]DOTA2 夜魇暗潮2020活动介绍官方视频
2020/11/04 DOTA
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
python使用webbrowser浏览指定url的方法
2015/04/04 Python
详解Python字符串对象的实现
2015/12/24 Python
Tensorflow加载预训练模型和保存模型的实例
2018/07/27 Python
django的模型类管理器——数据库操作的封装详解
2020/04/01 Python
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
网友共享的几个面试题关于Java和Unix等方面的
2016/09/08 面试题
酒店人事专员岗位职责
2013/12/19 职场文书
关于学习的演讲稿
2014/05/10 职场文书
python中的sys模块和os模块
2022/03/20 Python
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle