jQuery 中提供了哪些钩子?
Posted
技术标签:
【中文标题】jQuery 中提供了哪些钩子?【英文标题】:Which hooks are provided in jQuery? 【发布时间】:2013-03-07 19:59:08 【问题描述】:官方仅在jQuery API documentation 中记录了$.cssHooks
,而$.valHooks
在一个句子中被提及,用于解决.val()
中的已知问题。
我想知道jQuery中除了这两个之外还有多少个钩子,我们应该在我们的插件开发中使用$.valHooks
吗?如果是这样,我认为应该将其记录为一个专门的主题,而不仅仅是一个句子。
【问题讨论】:
+1 开始了解 jquery 中的新事物 根据经验,您不应依赖未记录的功能,因为它们的行为可能无法预测,并且在未来版本中可能随时更改,恕不另行通知。 @Juhana:同意。然而,似乎$.valHooks
现在被一些插件用来改变.val()
的行为。而且我真的认为这是一个很好的钩子。
库中有很多个钩子:$.attrHooks
、$.propHooks
、$.event.fixHooks
、$.event.keyHooks
、$.event.mouseHooks
等等。你可能想参考这些的源代码。
【参考方案1】:
有 8 种不同类型的外露挂钩。
还有一个仅供内部使用(已公开)-jQuery._queueHooks()
。
还有另外两个钩子:nodeHook
和boolHook
,它们在内部使用,它们的功能基本上嵌入到jQuery.attrHooks
和jQuery.valHooks
中。
以下是重要的:
jQuery.attrHooks
radio
输入上设置类型。
在删除时将 contenteditable
设置为 false (Bug #10429)。
在空字符串上将宽度和高度设置为自动而不是 0 (Bug #8150)
Some attributes require a special call on IE - href
、src
、width
和 height
。
如果style
属性为空字符串,则返回undefined
。
修复旧版 IE 中 value
属性的 get/set
读取属性值时,如果未定义挂钩,则使用boolHook
或nodeHook
(与jQuery.valHooks.button
相同)。
可用于在获取/设置元素的属性时附加额外的钩子。
jQuery.propHooks
href
/src
属性应获取完整的规范化 URL(Bug #10299、Bug #12915)。
修复“Safari 错误报告选项的默认选定属性”。
可用于在获取/设置元素的属性时附加额外的钩子。
jQuery.Tween.propHooks
jQuery.Tween
用于动画等。
scrollTop
和 scrollLeft
- 将在 jQuery 2.0 中删除。
其他动画内容。
jQuery.cssHooks
添加样式属性挂钩以覆盖获取和设置样式属性的默认行为。
修复获取/设置 CSS 属性opacity
的值。
修复了根据 display
属性获取 witdth
和 height
的问题。
修复了根据 box-sizing
属性设置 width
和 height
的问题。
修复了获得正确边距的问题。
修复了Webkit Bug #29084 - getComputedStyle
在指定顶部/左侧/底部/右侧时返回百分比
用于jQuery.fn.animate
扩展指定的样式属性,如margin
、padding
和border
。
用于其他各种jQuery.fn.animate
相关的东西。
将各种背景 CSS 属性设置为 inherit
无需使用 jQuery.cssHooks
,因为这样更短。
可用于在获取/设置元素的单个样式属性时附加额外的钩子。
jQuery.valHooks
option
元素 (Bug #6932) 修复了 Blackberry 4.7 错误。
用于读取select
元素的选定值。
修复了读取 button
元素的一些属性 - id
、name
和 coords
。与nodeHook
相同(见上文)。
修复了在 Webkit 和其他人之间检查 radio
和 checkbox
输入时的不兼容问题。
可用于在获取/设置输入元素的值时附加额外的钩子。
jQuery.event.fixHooks
jQuery.event.mouseHooks
和 jQuery.event.keyHooks
的支架,需要根据当前浏览器的支持进行修复和规范化。
jQuery.event.mouseHooks
MouseEvent
转移到jQuery事件对象中。
标准化event.which
(使用哪个鼠标按钮)跨浏览器,因为event.button
未标准化。
如果缺少pageX
、pageY
、clientX
、clientY
等,则计算它们并将它们设置为 jQuery 事件对象。
jQuery.event.keyHooks
KeyboardEvent
转移到jQuery 事件对象。
跨浏览器规范化event.which
(按下按钮的字符代码)。在原始事件中,它可能是 char
、charCode
、key
或 keyCode
。
来自 jQuery 1.9.1 源代码。
【讨论】:
非常感谢您列出所有此类挂钩。我想我需要通篇阅读每个 jQuery src 代码。以上是关于jQuery 中提供了哪些钩子?的主要内容,如果未能解决你的问题,请参考以下文章