2017年12月,云+社区对外发布,从最开始的技术博客到现在拥有多个社区产品。未来,我们一起乘风破浪,创造无限可能。
如果说php是世界上最好的语言,那么javascript无疑可以称为世界上最飘逸的语言,最近看了下jQuery的源码,实现了一个简陋的jQuery。...DOCTYPE html> jQuery源码浅析 <meta name="...<em>源码</em> * 省略了一些规范,如AMD, Commonjs * 整个<em>jQuery</em>包含在匿名函数中,函数就是闭包 */ (function(window, factory){ factory...的实例,即<em>jQuery</em>对象 * selector待查找的字符串,<em>源码</em>里还有context参数,此处省略 * 我们所说的<em>jQuery</em>其实准确的说是<em>jQuery</em>工厂方法,调用<em>jQuery</em>...= <em>jQuery</em>.fn = <em>jQuery</em>.prototype * <em>jQuery</em>.fn,<em>jQuery</em>.prototype扩展的方法属性 <em>jQuery</em>对象可以使用 */ <em>jQuery</em>.fn.init.prototype
jQuery = function (selector, context) { return new jQuery.fn.init(selector, context...); }; jQuery.fn = jQuery.prototype = { // jQuery是一个构造函数,原型上提供的方法是供其实例使用的 };...// 暴露API if ( typeof noGlobal === "undefined" ) { // 如果是在浏览器中运行JQ,我们直接在window上挂载jQuery/$属性,...属性值是jQuery这个方法 // $() 或者 jQuery() 就是把jQuery这个方法执行 window.jQuery = window.$ = jQuery;...} // 在webpack环境中运行,则module.exports=jQuery;(使用 let $=require('jquery')) return jQuery;};// 闭包
今天我们来分析一下jquery的源码,从关于初始化jquery这个函数开始。...jQuery.fn赋值原型链 jQuery.fn = jQuery.prototype = { jquery: version } 3 init = jQuery.fn.init = function...已经赋值了jQuery的原型链 第一行定义一个jQuery变量来接受jQuery.fn.init函数的实例化。...所以当第一行new jQuery.fn.init就得到其实jQuery本身,其实就等于:jQuery = new jQuery(selector, context)。...在源码的结尾处,源码开始的定义了一个jQuery变量来接收了jQuery自身实例的对象。
触发绑定的事件的处理程序 源码: //源码5472行 //nativeEvent即原生MouseEvent //触发事件的处理程序 dispatch: function...() 作用: 将原生事件对象MouseEvent修正(fix)成jQuery的event对象 源码: //源码5700行 fix: function( originalEvent ) {...()方法 (2)jQuery.Event() 源码: //click,false //修正event对象 //源码5777行 //src即MouseEvent jQuery.Event...作用: 获取handler队列 源码: jQuery.event = { //源码5547行 //组装事件处理队列 //event是fix过的MouseEvent, handlers..."click", origType: "click", data: undefined, handler: ƒ, guid: 4}, ] }, ] (5)回过头再往下看dispatch源码
() 作用: 返回被选元素相对于父元素(parent)的偏移坐标 使用: 直接调用$().position()即可,该方法没有 arguments(参数对象) 这是divTwo $("#pTwo").position() //{top: 0, left: 8} 源码...// 返回被选元素相对于父元素(parent)的偏移坐标 // 可以理解成被选元素设置为absolute, // 然后设置left、top的值就是相对于父元素的偏移坐标 // 源码...getBoundingClientRect() 计算的是目标元素的border的位置(左上角),是不包括margin的 ② 如果不加上margin的话(代码是通过减去,来算上margin的),是不准确的,看下图 所以源码最后会...: - jQuery.css( elem, "marginTop", true ) - jQuery.css( elem, "marginLeft", true ) (2)jQuery.css( elem
").on("click",function () { console.log("one被点击了") }) $("#one").trigger('click') 作用: 看 一、(1) 源码...: //触发type事件,data是自定义事件的额外参数 //源码9014行 trigger: function( type, data ) { return this.each...()方法 三、jQuery.event.trigger() 源码: //源码8850行 //type, data, this trigger: function( event,...(4)rfocusMorph //匹配focusinfocus或者focusoutblur //源码8872行 var rfocusMorph = /^(?...源码: //结果仅供内部使用 // results is for internal usage only //源码442行 makeArray: function( arr
前言:这篇讲完后,jQuery的文档处理就告一段落了,有空我把这部分整合下,发一篇文章目录。 一、示例代码 jQuery源码解析之clone() </...,需要注意的就是参数deepDataAndEvents不填的话,其值是根据参数dataAndEvents的值来定的 三、jQuery.clone() 作用同上 源码: jQuery.extend( {...//源码6117行 //生成被选元素的副本,包含子节点、文本和属性 clone: function( elem, dataAndEvents, deepDataAndEvents...示意图: 源码: //src:目标元素 //dest:克隆的元素 //源码5902行 function cloneCopyEvent( src, dest ) { var i,
script> 这是divTwo $("#pTwo").offset() //{top: 16, left: 8} 源码...(index,currentoffset)) // offset() relates an element's border box to the document origin //源码...2、$().offset({top:15,left:15}) $("#pTwo").offset({top:15,left:15}) 源码: 当有参数的时候,就会走 if 中,通过jQuery.offset.setOffset...( this, options, i ); } ); } jQuery.offset.setOffset( ) //offset()的关键方法 //源码10403...i、jQuery.extend( {}, curOffset ) jQuery.extend( {}, curOffset ) 暂不解析jQuery.extend(),但这里的作用 不用看源码,也知道是将
注意下div标签的默认值 二、$().width() 作用: 获取目标元素的宽度 源码: //源码7033行 //$.each(obj,callback(index,item){}) jQuery.each...getWidthOrHeight() 作用: 获取width或height的值 //获取 width 或 height //dimension:width/extra:"content" //源码...dimension, styles ) 作用: 获取元素的当前属性的值 // 获取元素的当前属性的值 // elem, "position" // elem,width,styles // 源码...jQuery.contains( elem.ownerDocument, elem ) ) { //使用jQuery.style方法来获取目标元素的属性值 ret = jQuery.style...: //源码7033行 //$.each(obj,callback(index,item){}) jQuery.each( [ "height", "width" ], function(
最近在学习Jquery的最新的源码,Jquery-3.3.1版本。网上有很多对jquery解析的文章。但是我还是要自己去尝试着看一篇jquery的源码。本系列博客用来记录其中的过程,并同大家分享。...本次学习Jquery源码是结合Jquery API来学习的。结合API来学习,首先会让我理解Jquery的整体结构,让我觉得Jquery源码是有迹可循。...如果盲目的去看Jquery源码,10000多行的代码可能会让人望而生畏。 Jquery API 很好地表达了Jquery的整体结构,可以很清楚知道Jquery由哪几部分组成。...Jquery使用 在使用Jquery的时候,可以通过JQuery或者$直接调用Jquery提供的方法,并不需要去实例化Jq对象。...$.extend,是jquery直接提供的静态方法,$()方式调用的是Jquery.fn中的方法。两种不同调用Jquery的方式。
//源码4686行 jQuery.fn.extend( { queue: function( type, data ) { xxx return jQuery.queue( this.../*getter*/ $("#A").queue('type') //[a,b] 源码: jQuery.fn.extend( { //入队 //源码4663行 //'type...源码: jQuery.extend( { //作用:目标元素可执行的任务队列 //源码4596行 //elem 目标元素 //$("#A"),"type",function...源码: jQuery.fn.extend( { //出队 //移出队头的函数并执行它 //源码4717行 dequeue: function( type ) {...源码: jQuery.extend( { //源码4624行 //目标元素,'type' dequeue: function( elem, type ) { //
: jQuery.Animation = jQuery.extend( Animation, { //源码8175行 //defaultPrefilter是一个function...获得tween对象,并把tween对象放进animation.tweens数组中 ② 简单看下jQuery.Tween源码: //源码7568行 function Tween( elem, options...: //源码8431行 jQuery.timers = []; (7)jQuery.fx.start() 作用: 在动画运行前,加锁,并运行动画 源码: //源码8514行 //加锁,运行动画...()方法(动画渲染) 源码: //源码7694行 //如果动画已经开始,那么就不断执行jQuery.fx.tick()方法(动画渲染) function schedule() { /...(); } } (9)jQuery.fx.tick() 作用: 运行Animation.tick()并安全地移除它 源码: //源码8483行 //运行Animation.tick
jQuery的css选择器,是一大亮点,其实现源码也可单独拎出来作为模块使用。 先看个整体,在jQuery源码中在行229-2752区域。...数量太多就不一一列举了,感兴趣的可以自己去看源码吧。
前言: 需要先看 jQuery源码解析之$.queue()、$.dequeue()和jQuery.Callbacks() 一、举例 divA 的宽度先变成 500px,再变成 300px,最后变成 1000px...: //之前有说过: jQuery.fn.extend() 是$()的方法 jQuery.fn.extend( { //源码8062行 //{'width': '500'}...() 作用: 初始化动画对象的属性 源码: //源码8009行 //undefiend undefined undefined //作用是返回一个经过修改的opt对象 jQuery.speed...()),如果是fx动画的话,同时执行出队操作(jQuery.dequeue()) 源码 这个方法上篇文章已经分析过了,这里就简单分析下: jQuery.fn.extend( { //optall.queue...,再运行doAnimation方法; 如果队首元素是inprogress的话,则移除锁 如果队列为空的话,则清空queue,节省内存 源码: //源码4624行 //目标元素,'type'
前言:跟 当我调用了$().append()后,jQuery内部发生了什么?...所以,本文只讲述 jQuery 中最后对 replaceWith() 处理的相关代码。...想了解domManip() 和 buildFragment()的,请看 当我调用了$().append()后,jQuery内部发生了什么?...一、示例代码 这是divTwo ...源码: // 源码6324行 // 把被选元素替换为新的内容 replaceWith: function() { var ignored = []; //
接昨天的jQuery原型属性方法部分。 each()方法:为每个匹配的元素集合执行回调函数,是一个jQuery版的遍历方法。...jQuery.prototype = { each: function(callback) { return jQuery.each(this, callback) }...构造函数的实例对象,凡是jQuery对象原型上的方法,在实例对象中都可以被访问到的。...jQuery.prototype = { map: function( callback ) { return this.pushStack( jQuery.map( this,...说的不太让人懂,虽然用也会用,不就是在jQuery实例对象进行DOM选择链条中返回未选状态么,但其实看代码实现更明确: jQuery.prototype = { end: function(){
jQuery源码学习第二节。 今天看下简化框架的第二部分:line: (146 - 225) 为jQ对象添加一些方法和属性。...1jQuery.fn = jQuery.prototype = { 2 constructor: jQuery, 3 length: 0, 4 // 添加原型方法和属性... 5} 从上段代码中可以看到...,jQuery对象作为构造函数,在其原型上定义了一些属性和方法,同时其原型也被指向jQuery对象的属性fn上面。...1//jQuery源码 2var arr = [], 3 slice = arr.slice; 4jQuery.prototype = { 5 toArray: function()...这个方法其实作用就是把元素集合添加到一个新的对象中,并且这个对象还具有jQuery对象的引用,所以也就是具有jQuery对象的所有方法和属性,链式调用起来妥妥的呀。
现在看到jQuery的227行,本篇读jQ的继承方法jQuery.extend()。 官方作用解释是将一个或多个对象合并到目标对象中。...看下源码实现: jQuery.extend = jQuery.fn.extend = function(){ //方法体......对象上添加extend属性,并且在jQuery.fn上面也添加同样的extend属性,还记得前面jQuery.fn = jQuery.prototype不?...jQuery对象的fn属性指针就指向jQuery对象的原型,并且因为对象都是引用类型的,所以上例代码的操作意思就是:在jQuery对象和它的原型对象上都添加extend方法,该方法最后返回的是一个合并处理后的对象...jQuery.fn即原型对象上添加extend()方法的代码解释,再复习下:jQuery对象和其原型上都具有extend()方法,区别在于一个是类方法,一个是成员方法,在使用场景上请注意。
领取专属 10元无门槛券
手把手带您无忧上云