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插件制作 自增长输入框实现代码
Aug 17 jQuery
bootstrap+jQuery实现的动态进度条功能示例
May 25 jQuery
jQuery使用ajax_动力节点Java学院整理
Jul 05 jQuery
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
jQuery实现简单的回到顶部totop功能示例
Oct 16 jQuery
jQuery实现form表单序列化转换为json对象功能示例
May 23 jQuery
jQuery中将json数据显示到页面表格的方法
May 27 jQuery
jQuery pjax 应用简单示例
Sep 20 jQuery
jquery.pager.js实现分页效果
Jul 29 jQuery
JS/jQuery实现超简单的Table表格添加,删除行功能示例
Jul 31 jQuery
jquery实现吸顶导航效果
Jan 08 jQuery
JQuery复选框全选效果如何实现
May 08 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计算近1年的所有月份
2017/03/13 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
php 与 nginx 的处理方式及nginx与php-fpm通信的两种方式
2018/09/28 PHP
关于Jqzoom的使用心得 jquery放大镜效果插件
2010/04/12 Javascript
js通过更改按钮的显示样式实现按钮的滑动效果
2014/04/23 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
Node.js与Sails ~项目结构与Mvc实现及日志机制
2015/10/14 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
requireJS使用指南
2016/04/27 Javascript
js简单倒计时实现代码
2016/04/30 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
JSONP基础知识详解
2017/03/19 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
angular 组件通信的几种实现方式
2018/07/13 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
js实现图片上传到服务器和回显
2020/01/19 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
ng-alain的sf如何自定义部件的流程
2020/06/12 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
2020/11/03 Javascript
vue+vant 上传图片需要注意的地方
2021/01/03 Vue.js
详解Python中for循环的使用方法
2015/05/14 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
python遍历一个目录,输出所有的文件名的实例
2018/04/23 Python
python版本五子棋的实现代码
2018/12/11 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
django2笔记之路由path语法的实现
2019/07/17 Python
大数据分析用java还是Python
2020/07/06 Python
幼儿评语大全
2014/04/30 职场文书
我爱我家教学反思
2014/05/01 职场文书
2014年党员创先争优承诺书
2014/05/29 职场文书
民族学专业求职信
2014/07/28 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
答辩状格式范本
2015/05/22 职场文书
mysql在项目中怎么选事务隔离级别
2021/05/25 MySQL
python可视化之颜色映射详解
2021/09/15 Python