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 相关文章推荐
JS与jQuery实现子窗口获取父窗口元素值的方法
Apr 17 jQuery
jquery对table做排序操作的实例演示
Aug 10 jQuery
jQuery实现动态控制页面元素的方法分析
Dec 20 jQuery
jQuery替换节点元素的操作方法
Mar 18 jQuery
jQuery实现的两种简单弹窗效果示例
Apr 18 jQuery
如何用input标签和jquery实现多图片的上传和回显功能
May 16 jQuery
jQuery中$原理实例分析
Aug 13 jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
Sep 01 jQuery
jQuery 操作 HTML 元素和属性的方法
Nov 12 jQuery
Jquery实现获取子元素的方法分析
Aug 24 jQuery
JQuery省市联动效果实现过程详解
May 08 jQuery
jQuery使用jsonp实现百度搜索的示例代码
Jul 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 得到根目录的 __FILE__ 常量
2008/07/23 PHP
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
PHP取整函数:ceil,floor,round,intval的区别详细解析
2013/08/31 PHP
php内嵌函数用法实例
2015/03/20 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
PHP格式化显示时间date()函数代码
2018/10/03 PHP
javascript 密码强弱度检测万能插件
2009/02/25 Javascript
jquery中文乱码的多种解决方法
2013/06/21 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
全面解析JavaScript的Backbone.js框架中的Router路由
2016/05/05 Javascript
微信小程序 tabs选项卡效果的实现
2017/01/05 Javascript
react-native fetch的具体使用方法
2017/11/01 Javascript
讲解vue-router之命名路由和命名视图
2018/05/28 Javascript
浅谈vue中关于checkbox数据绑定v-model指令的个人理解
2018/11/14 Javascript
javascript History对象原理解析
2020/02/17 Javascript
vue3 watch和watchEffect的使用以及有哪些区别
2021/01/26 Vue.js
PyMongo安装使用笔记
2015/04/27 Python
获取Django项目的全部url方法详解
2017/10/26 Python
Python如何抓取天猫商品详细信息及交易记录
2018/02/23 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
解决 jupyter notebook 回车换两行问题
2020/04/15 Python
python 实现倒计时功能(gui界面)
2020/11/11 Python
HTML5 MiranaVideo播放器 (代码开源)
2010/06/11 HTML / CSS
HTML5语义化元素你真的用对了吗
2019/08/22 HTML / CSS
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
英国DVD和蓝光碟片购买网站:Zoom.co.uk(电影和电视)
2019/09/23 全球购物
安全生产检讨书
2014/01/21 职场文书
孝老爱亲模范事迹
2014/01/24 职场文书
勾股定理课后反思
2014/04/26 职场文书
2015年工会工作总结
2015/03/30 职场文书
幽默导游词开场白
2015/05/29 职场文书
张丽莉观后感
2015/06/16 职场文书
画展观后感
2015/06/17 职场文书
Python下opencv库的安装过程及问题汇总
2021/06/11 Python