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实现选中行变色效果(实例讲解)
Jul 06 jQuery
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
jQuery 1.9版本以上的浏览器判断方法代码分享
Aug 28 jQuery
jquery在vue脚手架中的使用方式示例
Aug 29 jQuery
jquery插件开发之选项卡制作详解
Aug 30 jQuery
jQuery插件artDialog.js使用与关闭方法示例
Oct 09 jQuery
jQuery与vue实现拖动验证码功能
Jan 30 jQuery
jQuery实现动态显示select下拉列表数据的方法
Feb 05 jQuery
jQuery实现的简单手风琴效果示例
Aug 29 jQuery
jquery实现上传文件进度条
Mar 26 jQuery
jQuery HTML设置内容和属性操作实例分析
May 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实现按文件名搜索文件的远程文件查找器
2014/05/10 PHP
PHP使用array_multisort对多个数组或多维数组进行排序
2014/12/16 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
jquery实现通用版鼠标经过淡入淡出效果
2014/06/15 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
jQuery点击其他地方时菜单消失的实现方法
2016/04/22 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
jquery的父、子、兄弟节点查找,节点的子节点循环方法
2016/12/07 Javascript
animate.css在vue项目中的使用教程
2018/08/05 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
vue3+typescript实现图片懒加载插件
2020/10/26 Javascript
JQuery绑定事件四种实现方法解析
2020/12/02 jQuery
[01:00:12]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第一场
2018/04/09 DOTA
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
python下载微信公众号相关文章
2019/02/26 Python
解决Mac下使用python的坑
2019/08/13 Python
浅谈python中频繁的print到底能浪费多长时间
2020/02/21 Python
HTML5+CSS3 实现灵动的动画 TAB 切换效果(DEMO)
2017/09/15 HTML / CSS
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
女儿十岁生日答谢词
2014/01/27 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
网吧消防安全责任书
2014/07/29 职场文书
投标授权委托书范文
2014/08/02 职场文书
党员学习正风肃纪思想汇报
2014/09/12 职场文书
2014年体检中心工作总结
2014/12/23 职场文书
家长学校教学计划
2015/01/19 职场文书
投资合作意向书范本
2015/05/08 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
如何搭建 MySQL 高可用高性能集群
2021/06/21 MySQL