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 15 jQuery
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
May 15 jQuery
jQuery实现动态删除LI的方法
May 30 jQuery
JQuery.dataTables表格插件添加跳转到指定页
Jun 09 jQuery
jquery easyui如何实现格式化列
Jul 30 jQuery
jquery操作ul的一些操作笔记整理(干货)
Aug 31 jQuery
jquery实现限制textarea输入字数的方法
Sep 06 jQuery
如何用input标签和jquery实现多图片的上传和回显功能
May 16 jQuery
jQuery实现导航样式布局操作示例【可自定义样式布局】
Jul 24 jQuery
jquery 动态遍历select 赋值的实例
Sep 12 jQuery
JQuery实现ajax请求的示例和注意事项
Dec 10 jQuery
jQuery属性选择器用法实例分析
Jun 28 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
我的论坛源代码(二)
2006/10/09 PHP
php 仿Comsenz安装效果代码打包提供下载
2010/05/09 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
利用PHP判断是否是连乘数字串的方法示例
2017/07/03 PHP
PHP实现限制IP访问及提交次数的方法详解
2017/07/17 PHP
PHP实现负载均衡的加权轮询方法分析
2018/08/22 PHP
两个比较有用的Javascript工具函数代码
2010/02/17 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
jQuery页面滚动浮动层智能定位实例代码
2011/08/23 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
js事件机制----捕获与冒泡机制实例分析
2020/05/22 Javascript
JS中箭头函数与this的写法和理解
2021/01/14 Javascript
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
讲解Python中的递归函数
2015/04/27 Python
Python3使用turtle绘制超立方体图形示例
2018/06/19 Python
python实现简易内存监控
2018/06/21 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
python redis 删除key脚本的实例
2019/02/19 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
AUC计算方法与Python实现代码
2020/02/28 Python
PyQt5 控件字体样式等设置的实现
2020/05/13 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
新西兰网上购物,折扣店:BestDeals.co.nz
2019/03/20 全球购物
药学专业个人自我评价
2013/11/11 职场文书
人力资源经理的岗位职责范本
2014/02/28 职场文书
学校食品安全实施方案
2014/06/14 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
公务员个人年终总结
2015/02/12 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers