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表单验证之密码确认
May 22 jQuery
jQuery序列化后的表单值转换成Json
Jun 16 jQuery
jQuery插件DataTables分页开发心得体会
Aug 22 jQuery
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
jQuery选择器中的特殊符号处理方法
Sep 08 jQuery
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
jQuery实现图片上传预览效果功能完整实例【测试可用】
May 28 jQuery
jquery实现动态创建form并提交的方法示例
May 27 jQuery
jQuery弹框插件使用方法详解
May 26 jQuery
JQuery实现折叠式菜单的详细代码
Jun 03 jQuery
Jquery使用each函数实现遍历及数组处理
Jul 14 jQuery
jQuery中getJSON跨域原理的深入讲解
Sep 02 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
PHP关联链接常用代码
2012/11/05 PHP
php防止sql注入的方法详解
2017/02/20 PHP
详解PHP处理字符串类似indexof的方法函数
2017/06/11 PHP
JavaScript实现自己的DOM选择器原理及代码
2013/03/04 Javascript
使用javascript实现监控视频播放并打印日志
2015/01/05 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
js不间断滚动的简单实现
2016/06/03 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
Javascript农历与公历相互转换的简单实例
2016/10/09 Javascript
js实现可旋转的立方体模型
2016/10/16 Javascript
jQuery实现切换隐藏与显示同时切换图标功能
2017/10/29 jQuery
基于JavaScript+HTML5 实现打地鼠小游戏逻辑流程图文详解(附完整代码)
2017/11/02 Javascript
深入理解移动前端开发之viewport
2018/10/19 Javascript
微信端调取相册和摄像头功能,实现图片上传,并上传到服务器
2019/05/16 Javascript
解决layui 三级联动下拉框更新时回显的问题
2019/09/03 Javascript
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
vue-simple-uploader上传成功之后的response获取代码
2020/09/07 Javascript
Vue $attrs &amp; inheritAttr实现button禁用效果案例
2020/12/07 Vue.js
python中的格式化输出用法总结
2016/07/28 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python匿名函数的使用方法解析
2019/10/10 Python
基于python实现学生信息管理系统
2019/11/22 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
学校办公室主任职责
2013/12/27 职场文书
领导干部学习“三严三实”思想汇报
2014/09/15 职场文书
物流业务员岗位职责
2015/04/03 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
导游词之山东八大关
2019/12/18 职场文书
Ajax实现异步加载数据
2021/11/17 Javascript