jquery源码解析之选择器实现

  1. 为什么$取得的对象要设计成数组的形式?

    jquery内部采用了一种“类数组对象”的方式作为存储结构,既可以像对象一样处理jQuery操作,也可以像数组一样使用push、pop、shift、sort、each、map等类数组的方法操作jquery对象。

    2.Sizzle选择器

支持九种方式的处理:

// 1.$(document)   
// 2.$(‘<div>’) 
// 3.$(‘div’) 
// 4.$(#test’) 
// 5.$(function(){}) 
// 6.$("input:radio", document.forms[0]); 
// 7.$(‘input’, $(‘div’)) 
// 8.$() 
// 9.$("<div>", { 
//          "class": "test", 
//          text: "Click me!", 
//          click: function(){ $(this).toggleClass("test"); } 
//       }).appendTo("body"); 
// 10$($(‘.test’))

sizzle主要是针对于复杂选择器表达式,且在不支持querySelectorAll情况下,有一个对象用来记录跟选择器相关的属性以及操作,sizzle查找的顺序是从右到左进行匹配的。类似$(‘div a’)这样的匹配,先搜寻页面中所有的a标签,再往后判定它的父节点是否为div,一层一层向上过滤。:
这里写图片描述
relative = {
“>”: { dir: “parentNode”, first: true },
” “: { dir: “parentNode” },
“+”: { dir: “previousSibling”, first: true },
“~”: { dir: “previousSibling” }
}
一般对于伪类来说,只能从左到右进行匹配,而从性能触发,采取从右到左。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值