Ruby's Louvre

每天学习一点点算法

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

我的第四代选择器Rage

Rage其实已经完成了半年多了,一直在内部使用。它的实现原理与Sizzle一致,都是通过最右近的表达式得到一个种子集,然后不断往左边切割,过滤种子集中不符合的元素,将它们置为flase,最后去掉这些false元素,就得到最后结果了。

支持CSS选择器类型,除jQuery自定义的位置伪类外,一切CSS选择器类型都支持。

由于Sizzle已经在这领域开发很久了,因此很难赶上其速度。

即使如此,我还是很有收获,如更深入了解Sizzle的运作,一些去重排序的算法(主要来自JK的帮助),新的子元素过滤伪类的算法,querySelectorAll的用法改进等等。

不过,第四代选择器最大的特色是其权重体系,它把所有选择器类型分为五类:

index : {//构建权重体系
     "#":12,
     ".":23,
     "[":34,
     ":":55
     //tagName:41
 },
 apis: {
     12 : "getElementById",
     23 : "getElementsByClassName",
     34 : "getElementsByName",
     41 : "getElementsByTagName" ,
     55 : ""
 },

查找时用这些数字的十位数,过滤时用这些数字的个位数,之所以速度慢下来,是从右到左的实现太复杂了,暂时还无法掌控它。但这东西迟早会应用我新一代选择器中。

使用方法,dom.query(expr,context),不过它是依赖于lang模块的

如果您觉得此文有帮助,可以打赏点钱给我支付宝1669866773@qq.com ,或扫描二维码

posted on   司徒正美  阅读(2181)  评论(2编辑  收藏  举报

编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
历史上的今天:
2009-11-09 javascript框架之继承机制3
2009-11-09 javascript的currying函数
点击右上角即可分享
微信分享提示