Jquery源码分析---构建Jquery的Dom元素
2010-09-14 13:36:44 来源:WEB开发网其它如属性(Attribute)选择器,Pseudo Classes都是筛选器,只能附在一个元素或多个元素后面。,特殊情况就是对于*标签取到元素集进行筛选。
看一个:div.foo:nth-child(odd)[@foo=bar]#aId > a的例子:
à第一步:找到div type选择器的所有元素。
à第二步:在这些元素中找到class为foo的元素。如果没有就根本不要去分析下面的字符。
à第三步:根据:nth-child(odd)找到元素的子孩子元素为偶数的的元素。进一步筛选了。
à第四步:找到[],就是属性筛选器了,根据foo属性值bar来判断集合中还有那些满足条件。
à第五步:在这些元素集合,找到id=aId的元素,进一步筛选。
à第六步:在这些元素集合中找到所有元素对应的子元素类型为a的所有子元素。
à结果:我们可以看到,现在元素是子元素的集合。
讲完了通版的大道理,接下来就是来看看jQuery是怎么实现的:
// 搜索所有与指定表达式匹配的元素。这个函数是找出正在处理的元素的后代元素的好方法。
// 所有搜索都依靠jQuery表达式来完成。这个表达式可以使用CSS1-3的选择器语法来写。
find : function(selector) {
var elems = jQuery.map(this, function(elem) {// 找到每个元素的满足的
return jQuery.find(selector, elem); });
return this.pushStack(/[^+>] [^+>]/.test(selector) ? jQuery
.unique(elems) : elems);// 是不是返回不重复的元素?
},
这是jquery.fn.init调用的find方法。它只是完成之本本对象集合中每一个元素都调用jQuery.find(selector, elem)方法,组合成新unique集合后构建新jquery对象。最重要的实质性的工作在jQuery.find(selector, elem)完成:
更多精彩
赞助商链接