时间:2021-05-26
jQuery最强大的功能在于它可以通过css选择器查找元素,它的源码中有一半是sizzle css选择器引擎的代码,在html5规范出来之后,增加了document.querySelector和document.querySelectorAll直接查找元素,如果是做移动端开发的,使用jQuery的必要性大大降低。
用js代码实现css选择器,必然是用正则表达式来识别字符串了,当然浏览器提供的原生api 效率更高,以下代码只做原理性展示,并未优先性能,
例如
1)查找id显然是用document.getElementById更高效,浏览器已经做了hash,一次性找到元素不用遍历每个节点。
2)查找 name用document.getElementsByName更高效,浏览器已经做了一个含有该name的集合,
3)查找标签名 用document.getElementsByTagName更高效,浏览器已经做了一个含有该tag集合,从这个集合中再查找子集显然可以少遍历很多的元素,至于浏览器是不是在元素创建的时候就更新了缓存的集合就不得而知了,但是从这个集合中判断是不是目标元素的子节点还要用contains也会有性能损耗。
好了,我们先不考虑用原生api优化选择器的问题,只用纯正则表达式来做一个简单的实现,先用正则判断如果含有#就是id选择器,如果含有点号就是class选择器,如果含有[]就是属性选择器,设定好查找目标后开始遍历子节点,要用递归函数遍历childNodes子节点的id,name,className,getAttribute是否匹配,如果匹配就返回该元素。完整的代码如下:
html:
javascript:
<script type="text/javascript"> function find(el, selector) { //查找子节点,用法类似jquery的find函数,仅支持id,class,attr选择器,仅支持返回匹配的第一个元素 var m = selector.match(/([#\.\[])([\w\W]+)/i); var type, key,attrName, result; if (m) { if (m[1] == ".") { type = "class"; key = m[2]; } else if (m[1] == "#") { type = "id"; key = m[2]; } if (m[1] == "[") { type = "attr"; m = m[2].match(/(\w+)=(\w+)/i); attrName = m[1]; key = m[2]; } } else { type = "tag"; key = selector; } function findChild(node) { var c; for (var i = 0; i < node.childNodes.length; i++) { c = node.childNodes[i]; if (type == "class" && c.className == key) { result = c; return; } else if (type == "id" && c.id == key) { result = c; return; } else if (type == "attr" && c.getAttribute && c.getAttribute(attrName) == key) { result = c; return; } else if (type == "tag" && c.tagName && c.tagName.toLowerCase() == key) { result = c; return; } findChild(c); } } findChild(el); return result; } console.log(find(document.body,"#sp_id").innerHTML); console.log(find(document.body,".sp_class").innerHTML); console.log(find(document.body,"[name=sp_name]").innerHTML); console.log(find(document.body,"b").innerHTML); </script>以上这篇jQuery原理系列-css选择器的简单实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Jquery中CSS选择器用法。分享给大家供大家参考。具体如下:jQuery使用了一套css选择器,共有5种,即标签选择器,ID选择器,类选择器,
选择器从最开始看到Jquery这样的选择器就让我想起了CSS的选择器,简直是同出一辙啊,CSS的选择器语法个人觉得相当的经典,那么Jquery借鉴CSS也就没有
jQuery元素选择器和属性选择器允许您通过标签名、属性名或内容对HTML元素进行选择。jQuery元素选择器:jQuery使用CSS选择器来选取HTML元素。
jQuery允许开发者使用从CSS1到CSS3几乎所有的选择器,以及jQuery独创的高级而复杂的选择器。另外还可以加入插件使其支持XPath选择器,甚至开发者
jQuery元素选择器jQuery使用CSS选择器来选取HTML元素。$("p")选取元素。$("p.intro")选取所有class="intro"的元素。$