段落不够清晰,待整理

看jQuery源码的时候,经常见到含有hooks标志的对象,如cssHooks, attrHooks, propHooks, valHooks.

下面对其中的一段进行解读。

jQuery.extend({
// Add in style property hooks for overriding the default
// behavior of getting and setting a style property
cssHooks: {
opacity: {
get: function( elem, computed ) {
if ( computed ) {
// We should always get a number back from opacity
var ret = curCSS( elem, "opacity" );
return ret === "" ? "1" : ret; }
}
}
}, ....
});

从上面看到,分析下cssHooks里面覆写某个属性的结构。

Hook 函数特征:

propName: {
get: function(elem, computed){
// obtain and return a value
return "something";
},
set: function(elem, value){
// do something
}
}

cssHooks相当于是为jQuery内部核心函数写的内部API 插件,供核心函数完成功能使用。

jQuery内部的css, attr, prop, val中会用到,即对应前面的几个hooks对象。

jQuery内部是如何使用的。

style和css方法是实现 css()的核心方法。

jQuery.extend({
// 设置元素css属性的方法
style: function (elem, name, value) { }
// 获取元素css属性的方法
css: function (elem, name) {
...
hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; if(hooks && "get" in hooks) {
val = hooks.get(elem, true);
}
...
return val;
}
});

如果该属性name,在cssHooks存在一个对应的对象,就会尝试用hooks中的方法来解决。如果不行,后面会尝试使用其他方法。

因此:jQuery优先尝试使用hooks中对象方法来解决css, attr, prop, val 访问。

添加一个自定义的hook

我们来实现一个用$('div').attr('open') 来实现访问元素的is-open属性,和$('div').attr('open',true)来实现设计属性。(这个例子实际意义不大,仅作举例说明,下来找到更好的进行更换。

$.attrHooks.open = {
get: function (elem) {
return $(elem).prop('is-open');
},
set: function (elem, val) {
return $(elem).attr('is-open', val);
}
}; jQuery(function ($) {
$('.test').attr('open', 'open');
console.log( $('.test').attr('is-open') ); // 'open'
});

总结:

 

jQuery hooks源码学习的更多相关文章

  1. 关于jQuery的源码学习

    注:该思维学习自另一个博客:https://blog.csdn.net/software0017/article/details/80317348 以下为我自己总结的jQuery结构:

  2. jQuery源码学习感想

    还记得去年(2015)九月份的时候,作为一个大四的学生去参加美团霸面,结果被美团技术总监教育了一番,那次问了我很多jQuery源码的知识点,以前虽然喜欢研究框架,但水平还不足够来研究jQuery源码, ...

  3. jquery 源码学习(一)

    从上边的注释看,jQuery的源码结构相当清晰.条理,不像代码那般晦涩和让人纠结   1. 总体架构 1.1 自调用匿名函数 self-invoking anonymous function 打开jQ ...

  4. jQuery 源码学习 - 01 - 简洁的 $('...')

    首先贴上学习参考资料:[深入浅出jQuery]源码浅析--整体架构,备用地址:chokcoco/jQuery-. jQuery 库,js 开发的一个里程碑,它的出现,让网页开发者们告别荒蛮的上古时代, ...

  5. jquery源码学习笔记三:jQuery工厂剖析

    jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...

  6. jquery源码学习(一)——jquery结构概述以及如何合适的暴露全局变量

    jQuery 源码学习是对js的能力提升很有帮助的一个方法,废话不说,我们来开始学习啦 我们学习的源码是jquery-2.0.3已经不支持IE6,7,8了,因为可以少学很多hack和兼容的方法. jq ...

  7. jquery 源码学习(三)

    jQuery源码分析-03构造jQuery对象-源码结构和核心函数,需要的朋友可以参考下.   作者:nuysoft/高云 QQ:47214707 EMail:nuysoft@gmail.com 毕竟 ...

  8. jQuery 源码学习 - 02 - jQuery.fn.extend 与 jQuery.extend

    参考资料:[深入浅出jQuery]源码浅析--整体架构,备用地址:chokcoco/jQuery-. extend 方法在 jQuery 中是一个很重要的方法.jQuery 内部用它来拓展静态方法或者 ...

  9. 【深入浅出jQuery】源码浅析--整体架构

    最近一直在研读 jQuery 源码,初看源码一头雾水毫无头绪,真正静下心来细看写的真是精妙,让你感叹代码之美. 其结构明晰,高内聚.低耦合,兼具优秀的性能与便利的扩展性,在浏览器的兼容性(功能缺陷.渐 ...

随机推荐

  1. 【sqli-labs】 less33 GET- Bypass AddSlashes (GET型绕过addslashes() 函数的宽字节注入)

    和less32一样,对关键字符进行了添加\ 关于addslashes()函数 payload和less32一样 http://192.168.136.128/sqli-labs-master/Less ...

  2. Why use Cache-Control header in request?

    本地缓存也是缓存代理的一部分. 请求时使用Cache-Control 表示缓存的使用策略. 请求头里的no-cache表示浏览器不想读缓存,并不是说没有缓存.一般在浏览器按ctrl+F5强制刷新时,请 ...

  3. CentOS6.9下NFS配置说明

    NFS是Network File System的缩写,即网络文件系统.它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端可以通过挂载(mount)的方式将NFS ...

  4. JAVA中实现根据文件路径下载文件

    import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; ...

  5. eoLinker GoKu Gateway 开源版 V2.1发布,加入UI管理系统等

    GoKu API Gateway 是eoLinker旗下的开源版接口网关,支持OpenAPI与微服务管理,支持私有云部署,实现API转发.请求参数转换.数据校验等功能,提供图形化界面管理,能够快速管理 ...

  6. 【剑指Offer】33、丑数

      题目描述:   把只包含质因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含质因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数 ...

  7. 基于 Nginx XSendfile + SpringMVC 进行文件下载

    转自:http://denger.iteye.com/blog/1014066 基于 Nginx XSendfile + SpringMVC 进行文件下载 PS:经过实际测试,通过 nginx 提供文 ...

  8. Golang - 开篇必须吹牛逼

    目录 Golang - 开篇必须吹牛逼 Go牛逼吗 安装环境 Golang - 开篇必须吹牛逼 (1)我们为什么要学 高并发 深度 || 广度 (2)go学习思路和目标 多打多练 掌握go语言 做一个 ...

  9. 2.Eclipse中绑定Tomcat

    1.下载并成功安装Eclipse和Tomcat(该步骤有问题请查看我的相关经验): 2.打开Eclipse,单击“window”菜单,选择下方的“Preferences”: 3.找到Server下方的 ...

  10. 淘宝的开源分布式文件系统TFS

    TFS(Taobao FileSystem)是淘宝团队开源的海量非结构化数据存储设计的分布式系统.构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问.高可扩展.高可用.高性能.面向 ...