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插件制作 自增长输入框实现代码
Aug 17 jQuery
jQuery Validate 无法验证 chosen-select元素的解决方法
May 17 jQuery
jQuery获取单选按钮radio选中值与去除所有radio选中状态的方法
May 20 jQuery
jQuery Layer弹出层传值到父页面的实现代码
Aug 17 jQuery
使用JQuery实现图片轮播效果的实例(推荐)
Oct 24 jQuery
js和jQuery以及easyui实现对下拉框的指定赋值方法
Jan 23 jQuery
jQuery-ui插件sortable实现自由拖动排序
Dec 01 jQuery
jquery 验证用户名是否重复代码实例
May 14 jQuery
jQuery实现轮播图效果demo
Jan 11 jQuery
JQuery通过键盘控制键盘按下与松开触发事件
Aug 07 jQuery
jquery实现鼠标悬浮弹出气泡提示框
Dec 23 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 提取图片img标记中的任意属性的简单实例
2013/12/10 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
php中请求url的五种方法总结
2017/07/13 PHP
如何修改Laravel中url()函数生成URL的根地址
2017/08/11 PHP
javascript add event remove event
2008/04/07 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
基于Bootstrap重置输入框内容按钮插件
2016/05/12 Javascript
JS实现页面数据无限加载
2016/09/13 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
微信小程序scroll-view的滚动条设置实现
2020/03/02 Javascript
原生JS实现烟花效果
2020/03/10 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python实现三次样条插值
2018/12/17 Python
python 连续不等式语法糖实例
2020/04/15 Python
Python pip install如何修改默认下载路径
2020/04/29 Python
matplotlib.pyplot.matshow 矩阵可视化实例
2020/06/16 Python
python3 中使用urllib问题以及urllib详解
2020/08/03 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
python 实现波浪滤镜特效
2020/12/02 Python
介绍JAVA 中的Collection FrameWork(及如何写自己的数据结构)
2014/10/31 面试题
物业保安员岗位职责制度
2014/01/30 职场文书
经典婚礼主持词
2014/03/13 职场文书
文化宣传方案
2014/03/13 职场文书
合伙经营协议书范本
2014/04/18 职场文书
2014年涉外离婚协议书范本
2014/11/20 职场文书
趣味运动会标语口号
2015/12/26 职场文书
Golang实现可重入锁的示例代码
2022/05/25 Golang