jQuery与原生JavaScript选择HTML元素集合用法对比分析
本文实例讲述了jQuery与原生JavaScript选择HTML元素集合用法。分享给大家供大家参考,具体如下:
通过调用document.getElementsByTagName,document.getElementsByName以及document.getElementsByClassName(部分浏览器不支持),可以返回HTMLCollection对象。表面上,它们与数组很类似,因为它们都包含length属性并且元素都可以通过[index]方式访问。然而,实际上它们并不是数组;诸如push(),slice()与sort()之类的方法不受支持。
考虑下面的HTML文档:
Paragraph1
Paragraph2
Paragraph3
我们使用原生JavaScript的getElementsByTagName方法与jQuery选择器分别获取每一个paragraph节点:
varpCollection=document.getElementsByTagName("p"); varpQuery=$("p"); console.log("pCollection.length:",pCollection.length); console.log("pQuery.length:",pQuery.length);
它们都返回了相同的节点,因此集合长度都是3:
pCollection.length:3
pQuery.length:3
我们现在再向文档中添加一个paragraph元素,然后再观察一下集合:
//addnewparagraph varnewp=document.createElement("p"); newp.appendChild(document.createTextNode("Paragraph4")); document.body.appendChild(newp); // //displaylength 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的长度会在
元素增加时自动+1:
varpCollection=document.getElementsByTagName("p"); for(vari=0;i有时候,相较于静态的jQuery节点集合或者重复调用选择器,使用速度更快、原生的实时HTMLCollection更合适。幸运的是,我们可以在需要时方便地将任何集合传递给jQuery,例如:
varpCollection=document.getElementsByTagName("p"); //...addnodes,dowork,etc... $(pCollection).addClass("myclass");jQuery与其他库可以减少开发工作量,但是,在可能的情况下,使用原生(plainold)JavaScript,可以避免额外的文件请求与处理开销,从而写出更加高效的代码。
原文链接:http://www.sitepoint.com/javascript-vs-jquery-html-collections/
感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容可查看本站专题:《JavaScript操作DOM技巧总结》、《JavaScript页面元素操作技巧总结》、《JavaScript事件相关操作与技巧大全》、《JavaScript查找算法技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript错误与调试技巧总结》
希望本文所述对大家JavaScript程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。