jquery源码解析之选择器实现

来源:互联网 发布:自学武术软件 编辑:程序博客网 时间:2024/06/05 09:24
  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” }
}
一般对于伪类来说,只能从左到右进行匹配,而从性能触发,采取从右到左。

原创粉丝点击