jQuery的属性模块提供了如下方法

attr/removeAttr

prop/removeProp(1.6)

addClass/removeClass/toggleClass/hasClass

val

提供了几个静态方法以支持JQ对象以上方法,如jQuery.attr 对应  attr,即jq对象的attr方法内部调用了jQuery.attr。其次还有

jQuery.removeAttr -> removeAttr

jQuery.prop -> prop

看代码可发现attr和prop方法中都直接调用的是jQuery.access

attr: function( name, value ) {return jQuery.access( this, name, value, true, jQuery.attr );
},
prop: function( name, value ) {return jQuery.access( this, name, value, true, jQuery.prop );
},

最后一个参数分别是jQuery.attr,jQuery.prop。可以想象在jQuery.access中会调用传入的这个函数。下面是jQuery.access的源码

access: function( elems, key, value, exec, fn, pass ) {var length = elems.length;// Setting many attributesif ( typeof key === "object" ) {for ( var k in key ) {jQuery.access( elems, k, key[k], exec, fn, value );}return elems;}// Setting one attributeif ( value !== undefined ) {// Optionally, function values get executed if exec is trueexec = !pass && exec && jQuery.isFunction(value);for ( var i = 0; i < length; i++ ) {fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );}return elems;}// Getting an attributereturn length ? fn( elems[0], key ) : undefined;
},

当 设置/获取属性的时候遍历jQuery对象,依次调用fn函数。这里的fn可能是jQuery.attr和jQuery.prop。

需要注意的是这里用for遍历elems,这个elems实际是jQuery对象,jQuery对象它是一个ArrayLike。

大概就是如此,剩下的一堆hooks是用来解决浏览器兼容性的问题。如jQuery.attrHooks、jQuery.propHooks、jQuery.valHooks。列举如下

1,IE6/7不完全支持setAttribute,比如不能设置class,for等属性

2,IE6/7中getAttribute获取href / src 属性(相对路径)值与其它浏览器不同

3,IE6/7中获取Button元素的值有bug

4,IE6/7不支持setAttribute设置style / 不支持getAttribute获取style属性值

5,获取tabIndex属性有差异

6,布尔类型属性的修复,如selected,disabled,checked等

7,select和option元素的值修复

读jQuery之十七(attribute/property/class)相关推荐

  1. [原]简述Field,Attribute,Property的区别

    您要是关注我这个,说明您是行内人,那我就开门见山了,用代码来诠释吧 //Field protected string _Version; //Attribute [XmlElement("V ...

  2. attribute property --- jquery attr() prop()

    看了http://www.cnblogs.com/aaronjs/p/3387906.html ,总结下: attribute: 特性 直接写在标签上的属性,可以通过setAttribute.getA ...

  3. 简述Field,Attribute,Property的区别

    您要是关注我这个,说明您是行内人,那我就开门见山了,用代码来诠释吧 //Field protected string _Version; //Attribute [XmlElement("V ...

  4. 读jQuery之十二(删除事件核心方法)

    使用jQuery删除事件(或称解除事件绑定)有三个函数:unbind.die和undelegate.这三个方法都依赖于未公开的jQuery.event.remove(后续使用remove简写).此为删 ...

  5. 菜鸟读jQuery 2.0.3 源码分析系列(1)

    原文链接在这里,作为一个菜鸟,我就一边读一边写 jQuery 2.0.3 源码分析系列 前面看着差不多了,看到下面一条(我是真菜鸟),推荐木有入门或者刚刚JS入门摸不着边的看看,大大们手下留情,想一起 ...

  6. 读jQuery源码 jQuery.data

    var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/,rmultiDash= /([A-Z])/g;function internalData( elem, name ...

  7. “胭脂泪,相留醉,几时重”,读《唐宋词十七讲》有感一 —— 2021.12.23

    古诗云"年年岁岁花相似,岁岁年年人不同",可是一年又到尽头,我的境遇还是如此,甚至更糟糕了,唯一可慰藉自己的,就是心里似乎多了些东西,好像成长了一点点. "昨夜闲潭梦落花 ...

  8. 读jQuery 权威指南[6]--实用工具函数

    官方地址:http://api.jquery.com/category/utilities/ 一.数组和对象操作 1. $.each--遍历 $.each(obj,function(param1,pa ...

  9. 读jQuery源码释疑笔记

    本释疑笔记是针对自己在看源码的过程中遇到的一些问题的解答,对大众可能不具有参考性,不过可以看看有没有你也不懂得地方,相互学习,相互进步.  1.each的用法 之前对each的用法一直迷迷糊糊,这次终 ...

最新文章

  1. springDatasolr 排序
  2. 深度解密 Go math/rand
  3. 设计器的使用及常用控件
  4. Spark之Master主备切换机制原理
  5. 13结构型模式之桥接模式
  6. 叮!您收到一份超值Java基础入门资料! 1
  7. [译]JavaScript中的属性:定义和赋值的区别
  8. 与外系统连接时,需要考虑的问题
  9. OSPF NSSA forwarding address   深度解析
  10. 在 Google 工作是什么体验?
  11. 整理了一份嵌入式软件工具清单!
  12. MTTR、MTBF、MTTF、可用性、可靠性傻傻分不清楚?
  13. 你以为链家只是一个中介,但其实……
  14. LOW逼三人组(二)----选择排序算法
  15. 小组取什么名字好_寓意兴旺的公司名字取什么名字好
  16. php 如何让验证码刷新,php实现点击可刷新验证码_php技巧
  17. pwm一个时间单位_「硬见小百科」什么是PWM“死区”?
  18. 科学计算机sd mode使用方法,你是否知道科学计算器的使用方法
  19. 计算机毕业设计Java个人理财系统(源码+系统+mysql数据库+lW文档)
  20. 实现联系人功能,右侧A~Z滑动

热门文章

  1. 【转】BCWS、BCWP、ACWP的理解
  2. 给你一个项目,你会如何开展性能测试工作
  3. 【玩转嵌入式屏幕显示】(三)TFT-LCD屏幕打点 + 画线 + 画矩形 + 画圆Bresenham算法实现(基于打点函数,算法可移植到任何屏幕的驱动程序之上)
  4. 计算机组成原理实验写出下列微指令编码,计算机组成原理实验三.doc
  5. 关于未来人工智能时代的一点感想
  6. 今日收获 18/4/2
  7. Processing 网格纹理制作(棋盘格)
  8. 设备信息之硬盘序列号、设备序列号、操作系统安装时间、IP地址
  9. HD44780http://blog.sina.com.cn/s/blog_61b6e08b01016xif.html
  10. 互联网产品经理必读书籍