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 Masonry瀑布流布局神器使用详解
May 25 jQuery
深入研究jQuery图片懒加载 lazyload.js使用方法
Aug 16 jQuery
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
Sep 20 jQuery
基于jquery.page.js实现分页效果
Jan 01 jQuery
jQuery+koa2实现简单的Ajax请求的示例
Mar 06 jQuery
jQuery分组选择器简单用法示例
Apr 04 jQuery
jQuery zTree树插件的使用教程
Aug 16 jQuery
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
Oct 26 jQuery
jQuery实现的图片点击放大缩小功能案例
Jan 02 jQuery
jQuery三组基本动画与自定义动画操作实例总结
May 09 jQuery
jQuery开发仿QQ版音乐播放器
Jul 10 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
java EJB 加密与解密原理的一个例子
2008/01/11 PHP
PHP取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
Javascript与jQuery方法的隐藏与显示
2015/01/19 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
浅析jQuery 遍历函数,javascript中的each遍历
2016/05/25 Javascript
动态更新highcharts数据的实现方法
2016/05/28 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
基于Javascript实现文件实时加载进度的方法
2016/10/12 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
通过实例讲解JS如何防抖动
2019/06/15 Javascript
json 带斜杠时如何解析的实现
2019/08/12 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
小程序实现录音功能
2020/09/22 Javascript
[02:07]DOTA2新英雄展现中国元素,完美“圣典”亮相央视
2016/12/19 DOTA
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python3.2中的字符串函数学习总结
2015/04/23 Python
python使用PyGame绘制图像并保存为图片文件的方法
2015/04/24 Python
numpy.delete删除一列或多列的方法
2018/04/03 Python
django认证系统实现自定义权限管理的方法
2018/07/16 Python
详解python实现识别手写MNIST数字集的程序
2018/08/03 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
KIKO MILANO荷兰网上商店:意大利专业化妆品品牌
2017/05/12 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
Rhone官方网站:男士运动服装、健身服装和高级运动服
2019/05/01 全球购物
英国川宁茶官方网站:Twinings茶
2019/05/21 全球购物
打架检讨书400字
2014/01/17 职场文书
社区义诊活动总结
2014/04/30 职场文书
镇党政领导班子民主生活会思想汇报
2014/10/11 职场文书
员工安全责任协议书
2016/03/22 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS
Apache POI的基本使用详解
2021/11/07 Servers