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 EasyUI 组件加上“清除”功能实例详解
Apr 11 jQuery
jquery实现放大镜简洁代码(推荐)
Jun 08 jQuery
jQuery鼠标移动图片上实现放大效果
Jun 25 jQuery
jQuery实现节点的追加、替换、删除、复制功能示例
Jul 11 jQuery
详解jquery插件jquery.viewport.js学习使用方法
Sep 08 jQuery
使用JQuery实现图片轮播效果的实例(推荐)
Oct 24 jQuery
jquery.pager.js分页实现详解
Jul 29 jQuery
jQuery实现判断滚动条滚动到document底部的方法分析
Aug 27 jQuery
jquery 回调操作实例分析【回调成功与回调失败的情况】
Sep 27 jQuery
jQuery实现简易聊天框
Feb 08 jQuery
jQuery实现鼠标滑动切换图片
May 27 jQuery
如何使用jQuery操作Cookies方法解析
Sep 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音乐采集(部分代码)
2007/02/14 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
[原创]php简单隔行变色功能实现代码
2016/07/09 PHP
function, new function, new Function之间的区别
2007/03/08 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
select、radio表单回显功能实现避免使用jquery载入赋值
2013/06/08 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
浅谈node.js中async异步编程
2015/10/22 Javascript
jQuery插件扩展extend的简单实现原理
2016/06/24 Javascript
详细探究ES6之Proxy代理
2016/07/22 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
2016/10/21 Javascript
nodejs入门教程四:URL相关模块用法分析
2017/04/24 NodeJs
bootstrap模态框示例代码分享
2017/05/17 Javascript
AngularJs定时器$interval 和 $timeout详解
2017/05/25 Javascript
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
微信小程序实现banner图轮播效果
2020/06/28 Javascript
webpack项目使用eslint建立代码规范实现
2019/05/16 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
基于Python实现文件大小输出
2016/01/11 Python
Python中的if、else、elif语句用法简明讲解
2016/03/11 Python
详解python基础之while循环及if判断
2017/08/24 Python
python3利用venv配置虚拟环境及过程中的小问题小结
2018/08/01 Python
python3 拼接字符串的7种方法
2018/09/12 Python
Python简单过滤字母和数字的方法小结
2019/01/09 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
简单的Python人脸识别系统
2020/07/14 Python
美国家具网站:Cymax
2016/09/17 全球购物
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
电子商务专业个人的自我评价
2013/11/19 职场文书
行政总经理岗位职责
2013/12/05 职场文书
暑期实践思想汇报
2014/01/06 职场文书
信仰心得体会
2014/09/05 职场文书
房屋租赁意向书范本
2015/05/09 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
2016党员读书思廉心得体会
2016/01/23 职场文书
Python OpenCV超详细讲解读取图像视频和网络摄像头
2022/04/02 Python