为了账号安全,请及时绑定邮箱和手机立即绑定
  • 遍历祖先 通过jQ向上遍历DOM树,以查找元素的祖先 parent() .parent()方法允许我们能够在DOM树中搜索到这些元素的父级元素,从有序的向上匹配元素,并根据匹配的元素创建一个新的 jQuery 对象。 parents() .parents()和.parent()方法是相似的,但后者只是进行了一个单级的DOM树查找 parentsUntil() .parentsUntil() 方法会找遍所有这些元素的前辈元素,直到遇到了跟参数匹配的元素才会停止。返回的jQuery对象中包含了所有找到的前辈元素,除了与 .parentsUntil() 选择器匹配的那个元素。
    查看全部
    0 采集 收起 来源:遍历祖先

    2015-11-09

  • 此节待看
    查看全部
  • 为什么需要用这个domManip函数呢? 我们知道节点操作浏览器提供的接口无非就是那么几个: appendChild() 通过把一个节点增加到当前节点的childNodes[]组,给文档树增加节点: cloneNode() 复制当前节点,或者复制当前节点以及它的所有子孙节点: hasChildNodes() 如果当前节点拥有子节点,则将返回true: insertBefore() 给文档树插入一个节点,位置在当前节点的指定子节点之前。如果该节点已经存在,则删除之再插入到它的位置: removeChild() 从文档树中删除并返回指定的子节点: replaceChild() 从文档树中删除并返回指定的子节点,用另一个节点替换它。
    查看全部
    0 采集 收起 来源:节点操作

    2015-11-06

  • 对封装的节点操作做了参数上的校正支持,与对应处理的调用:append、prepend、before、after、replaceWith、appendTo、prependTo、insertBefore、insertAfter、replaceAll。 为什么需要用这个domManip函数呢? 我们知道节点操作浏览器提供的接口无非就是那么几个: appendChild() 通过把一个节点增加到当前节点的childNodes[]组,给文档树增加节点: cloneNode() 复制当前节点,或者复制当前节点以及它的所有子孙节点: hasChildNodes() 如果当前节点拥有子节点,则将返回true: insertBefore() 给文档树插入一个节点,位置在当前节点的指定子节点之前。如果该节点已经存在,则删除之再插入到它的位置: removeChild() 从文档树中删除并返回指定的子节点: replaceChild() 从文档树中删除并返回指定的子节点,用另一个节点替换它。 以上接口都有一个特性,传入的是一个节点元素。如果我们传递不是一个dom节点元素,如果是一个字符串,一个函数或者其他呢? 所以针对所有接口的操作,jQuery会抽象出一种参数的处理方案,也就是domManip存在的意义了,针对很多类似接口的参数抽象jQuery内部有很多这样的函数了,如之前属性操作中的jQuery.access。
    查看全部
    0 采集 收起 来源:节点操作

    2015-11-06

  • jQuery find() 方法 1、.find()方法返回被选元素的后代元素,一路向下直到最后一个后代。 2、.find()方法允许我们能够通过查找DOM树中的这些元素的后代元素,匹配的元素将构造一个新的jQuery对象。 3、.find()和.children()方法是相似的,但后者只是再DOM树中向下遍历一个层级。 4、.find()方法还可以接受一个选择器表达式,该选择器表达式可以是任何可传给$()函数的选择器表达式。如果紧随兄弟匹配选择器,它将被保留在新构建的jQuery对象中;否则,它被排除在外。 这个方法用的概率相当高,除了接受一个选择器外,还可以接受一个jQuery对象,我们可以看到.find()方法的内部实际上是调用的jQuery.find 也就是sizzle的引擎选择器。
    查看全部
    0 采集 收起 来源:遍历后代

    2015-11-06

  • .next() 获得匹配元素集合中每个元素紧邻的同辈元素。 .prev() 获得匹配元素集合中每个元素紧邻的前一个同辈元素,由选择器筛选(可选)。 .siblings() 获得匹配元素集合中所有元素的同辈元素,由选择器筛选(可选)。
    查看全部
    0 采集 收起 来源:遍历同胞(下)

    2015-11-06

  • .nextAll() 获得匹配元素集合中每个元素之后的所有同辈元素,由选择器进行筛选(可选)。 .nextUntil() 获得每个元素之后所有的同辈元素,直到遇到匹配选择器的元素为止。 .prevAll() 获得匹配元素集合中每个元素之前的所有同辈元素,由选择器进行筛选(可选)。 .prevUntil() 获得每个元素之前所有的同辈元素,直到遇到匹配选择器的元素为止。
    查看全部
    0 采集 收起 来源:遍历同胞(上)

    2015-11-06

  • JS 是单线程,定时器都是排队列的,理论上也达不到 1ms 绘制一次 dom
    查看全部
    0 采集 收起 来源:动画算法

    2015-11-05

  • 总结 所以整个 trigger 的核心,还是围绕着数据缓存在处理的,通过 on 机制在 jQuery.event.add 的时候预处理好了。trigger 的处理就是模拟冒泡的一个调度,具体的触发还是交给 jQuery.event.dispatch 方法了,通过 trigger 很好的模拟了浏览器事件流程,但是美中不足的是对象的事件混淆其中,这就造成了触发对象事件的时候最后会调用对象的相应方法。
    查看全部
    0 采集 收起 来源:事件trigger

    2015-11-04

  • 1.将原生的事件对象 event 修正为一个新的可写 event 对象,并对该 event 的属性以及方法统一接口 2.该方法在内部调用了 jQuery.Event(event) 构造函数
    查看全部
    0 采集 收起 来源:重写事件对象

    2015-11-04

  • 事件对象中我们用的最多的就是 target了,这个是我们的点击对象,别忘记了还有个 currentTarget 这个是事件的绑定对象,有什么区别? <div id="aaron"> <div> <p>Click me!</p> </div> </div> var aaron = document.getElementById('aaron') aaron.addEventListener('click',function(e){ console.log(this,this == e.currentTarget,e) },false) 如上结构,currentTarget 是 aaron 的 div 元素 , target 是 p 元素,事件对象是有作用域的 currentTarget 是等于 this 的。 事件对象的基础大家都是知道了,jQuery为了实现统一的事件对象调用与委托的的处理,将事件对象单独重写,这样如果用户做了任何的行为处理 jQuery 内部都能获取到状态值,从而用来处理同一个元素绑定多个模拟事件的判断处理。这也是重写后的一个重要意义。
    查看全部
    0 采集 收起 来源:事件对象

    2018-03-22

  • 第一种: A,B,C各自绑定事件,事件按照节点的冒泡层次触发 第二种: 元素 A 本身有事件,元素还需要委派元素 B.C 事件 委派的元素 B.C 肯定是该元素 A 内部的,所以先处理内部的委派,最后处理本身的事件 第三种: 元素本身有事件,元素还需要委派事件,内部委派的元素还有自己的事件,这个有点绕 先执行 B,C 自己本身的事件,然后处理 B,C 委派的事件,最后处理 A 事件
    查看全部
    0 采集 收起 来源:理解委托

    2015-11-04

  • 默认的触发循序是从事件源目标元素也就是 event.target 指定的元素,一直往上冒泡到 document 或者 body,途经的元素上如果有对应的事件都会被依次触发
    查看全部
    0 采集 收起 来源:理解委托

    2015-11-04

  • (function ($) { if ('onpropertychange' in document) { var rinput = /^INPUT|TEXTAREA$/, isInput = function(elem) { return rinput.test(elem.nodeName); };$.event.special.input = { setup: function() { var elem = this; if (!isInput(elem)) return false; $.data(elem, '@oldValue', elem.value); $.event.add(elem, 'propertychange', function(event) { if ($.data(this, '@oldValue') !== this.value) { $.event.trigger('input', null, this); }; $.data(this, '@oldValue', this.value); }); }, teardown: function() { var elem = this; if (!isInput(elem)) return false; $.event.remove(elem, 'propertychange'); $.removeData(elem, '@oldValue'); } }; }; // 声明快捷方式:$(elem).input(function () {}); // $.fn.input = function(callback) { // return this.bind('input', callback); // }; })(jQuery);
    查看全部
    0 采集 收起 来源:Special Event机制

    2015-11-04

  • jQuery.event.add内部实际上最终还是通过addEventListener绑定的事件
    查看全部
    0 采集 收起 来源:绑定设计

    2015-11-04

举报

0/150
提交
取消
课程须知
源码的阅读不是一蹴而就的,需要大家有一定的功底,比如jQuery的基础运用以及API的熟悉度,除此之外要有牢固的javascript、DOM、CSS的基础功底,甚至还需要理解常见的设计模式、数据结构等等。当然大家也不要被这些给吓住了,理解,总是需要一种慢慢的学习过程。
老师告诉你能学到什么?
通过本课程的学习,您可以由浅入深地剖析jQuery库的设计与实现。 其中我们围绕的重心: 1、设计理念 2、结构组织 3、接口设计 4、模式运用 5、场景套用

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!