jQuery源码学习笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jQuery源码学习笔记相关的知识,希望对你有一定的参考价值。

在慕课网上学习jQuery源码,做一些笔记小研究。

第1章 节点遍历 

第2章 文档处理 

第3章 元素操作 

第4章 样式操作 

第5章 事件体系 

第6章 数据交互 

第7章 动画引擎 

首先瞅瞅目录,大概可以了解一下这个是怎么讲的QAQ。

今天学习的是节点遍历。

遍历的对象主要是:1 祖先 2 同胞兄弟 3 后代 4 过滤

 

我们先看祖先。

.parent()方法允许我们能够在DOM树中搜索到这些元素的父级元素,从有序的向上匹配元素,并根据匹配的元素创建一个新的 jQuery 对象。

.parents()和.parent()方法是相似的,但后者只是进行了一个单级的DOM树查找

.parentsUntil() 方法会找遍所有这些元素的前辈元素,直到遇到了跟参数匹配的元素才会停止。返回的jQuery对象中包含了所有找到的前辈元素,除了与 .parentsUntil() 选择器匹配的那个元素。

简单来说.parent()是一个父元素,最近的那个,.parents是所有的父元素。.parentsUntil()是你可以传入一个搜寻终止点。

然后大概来看看它的写法(首先看看nodeType:http://www.w3school.com.cn/jsref/prop_node_nodetype.asp)

技术分享

function parent(elem) {
  var parent = elem.parentNode;  
//如果父亲节点是DocumentFragment就返回null
return parent && parent.nodeType !== 11 ? parent : null; } function parents(elem){ var matched = [];
//如果元素存在父元素且元素不是根节点
while ( (elem = elem[ ‘parentNode‘ ]) && elem.nodeType !== 9 ) {
//如果是元素类型就加入到数组中
if ( elem.nodeType === 1 ) { matched.push( elem ); } } return matched; } function parentsUntil(elem, filter) { var matched = [], until,
//如果没有定义过滤器,就把truncate设为false truncate
= filter !== undefined; while ((elem = elem[‘parentNode‘]) && elem.nodeType !== 9) { if (elem.nodeType === 1) {
//如果设置了过滤器就执行以下
if (truncate) {
//元素名称小写化比对是否是终止元素
if(elem.nodeName.toLowerCase() ==filter){ break; } } matched.push(elem); } } return matched; }

 

兄弟节点

//定义了一个公共的函数,减少重复的代码。
//elem中心元素,dir是寻找元素的类型,until是终止元素的标签名或者类名
function
dir(elem, dir, until) { var matched = [], truncate = until !== undefined; while ((elem = elem[dir]) && elem.nodeType !== 9) { if (elem.nodeType === 1) { if (truncate) { if (elem.nodeName.toLowerCase() == until || elem.className == until) { break; } } matched.push(elem); } } return matched; } //后面全部的兄弟节点 function nextAll(elem) { return dir(elem, "nextSibling"); }
//前面全部的兄弟节点
function prevAll(elem) { return dir(elem, "previousSibling"); }
function nextUntil(elem, until) { return dir(elem, "nextSibling", until); } function prevUntil(elem, until) { return dir(elem, "previousSibling", until); }
function sibling(cur, dir) {
  while ((cur = cur[dir]) && cur.nodeType !== 1) {}
  return cur;
}

function next(elem) {
  return sibling(elem, "nextSibling");
}

function prev(elem) {
  return sibling(elem, "previousSibling");
}

.next() 获得自己同族的下一个同胞

.prev() 获得自己同族的上一个同胞

.siblings() 获得自己同族的所有同胞除了自己

感觉有点疑惑这个siblings...今天先学习到这里吧。












以上是关于jQuery源码学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

jQuery源码学习笔记

jQuery源码学习笔记

jquery源码学习笔记(十六)

一行一行分析JQ源码学习笔记-02

11月2日——jQuery源码学习笔记

一行一行分析JQ源码学习笔记-04