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.dataTables表格插件添加跳转到指定页
Jun 09 jQuery
基于jQuery实现的Ajax 验证用户名唯一性实例代码
Jun 28 jQuery
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
jQuery完成表单验证的实例代码(纯代码)
Sep 30 jQuery
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
HTML5+JS+JQuery+ECharts实现异步加载问题
Dec 16 jQuery
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
Mar 28 jQuery
JQuery常见节点操作实例分析
May 15 jQuery
Jquery实现获取子元素的方法分析
Aug 24 jQuery
jQuery实现验证用户登录
Dec 10 jQuery
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
html5以及jQuery实现本地图片上传前的预览代码实例讲解
Mar 01 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取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
PHP中的Trait 特性及作用
2016/04/03 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
php获取微信共享收货地址的方法
2017/12/21 PHP
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
js弹出确认是否删除对话框
2014/03/27 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
详解Angular Forms中自定义ngModel绑定值的方式
2018/12/10 Javascript
Vue登录主页动态背景短视频制作
2019/09/21 Javascript
webpack打包优化的几个方法总结
2020/02/10 Javascript
从表单校验看JavaScript策略模式的使用详解
2020/10/17 Javascript
python 获取本机ip地址的两个方法
2013/02/25 Python
Python 变量类型及命名规则介绍
2013/06/08 Python
Python性能优化的20条建议
2014/10/25 Python
python中的Elasticsearch操作汇总
2019/10/30 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
python实现ftp文件传输功能
2020/03/20 Python
Python实现初始化不同的变量类型为空值
2020/06/02 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
html5给汉字加拼音加进度条的实现代码
2020/04/07 HTML / CSS
俄罗斯电子产品在线商店:UltraTrade
2020/01/30 全球购物
营销与策划应届生求职信
2013/11/04 职场文书
列车长先进事迹材料
2014/01/25 职场文书
年级组长自我鉴定
2014/02/22 职场文书
银行行长竞聘演讲稿
2014/04/23 职场文书
企业承诺书格式
2014/05/21 职场文书
公司档案管理制度
2015/08/05 职场文书
小学主题班会教案
2015/08/17 职场文书
个人落户申请书怎么写?
2019/06/28 职场文书
导游词之南京中山陵
2019/11/27 职场文书