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()

还有另外两个钩子:nodeHookboolHook,它们在内部使用,它们的功能基本上嵌入到jQuery.attrHooksjQuery.valHooks中。

以下是重要的:

jQuery.attrHooks

在值重置 IE6-9 中的值后,在 radio 输入上设置类型。 在删除时将 contenteditable 设置为 false (Bug #10429)。 在空字符串上将宽度和高度设置为自动而不是 0 (Bug #8150) Some attributes require a special call on IE - hrefsrcwidthheight。 如果style 属性为空字符串,则返回undefined。 修复旧版 IE 中 value 属性的 get/set 读取属性值时,如果未定义挂钩,则使用boolHooknodeHook(与jQuery.valHooks.button 相同)。 可用于在获取/设置元素的属性时附加额外的钩子。

 

jQuery.propHooks

href/src 属性应获取完整的规范化 URL(Bug #10299、Bug #12915)。 修复“Safari 错误报告选项的默认选定属性”。 可用于在获取/设置元素的属性时附加额外的钩子。

 

jQuery.Tween.propHooks

jQuery.Tween 用于动画等。

修复了 IE8 中的 scrollTopscrollLeft - 将在 jQuery 2.0 中删除。 其他动画内容。

 

jQuery.cssHooks

添加样式属性挂钩以覆盖获取和设置样式属性的默认行为。

修复获取/设置 CSS 属性 opacity 的值。 修复了根据 display 属性获取 witdthheight 的问题。 修复了根据 box-sizing 属性设置 widthheight 的问题。 修复了获得正确边距的问题。 修复了Webkit Bug #29084 - getComputedStyle 在指定顶部/左侧/底部/右侧时返回百分比 用于jQuery.fn.animate 扩展指定的样式属性,如marginpaddingborder。 用于其他各种jQuery.fn.animate 相关的东西。 将各种背景 CSS 属性设置为 inherit 无需使用 jQuery.cssHooks,因为这样更短。 可用于在获取/设置元素的单个样式属性时附加额外的钩子。

 

jQuery.valHooks

option 元素 (Bug #6932) 修复了 Blackberry 4.7 错误。 用于读取select 元素的选定值。 修复了读取 button 元素的一些属性 - idnamecoords。与nodeHook 相同(见上文)。 修复了在 Webkit 和其他人之间检查 radiocheckbox 输入时的不兼容问题。 可用于在获取/设置输入元素的值时附加额外的钩子。

 

jQuery.event.fixHooks

jQuery.event.mouseHooksjQuery.event.keyHooks 的支架,需要根据当前浏览器的支持进行修复和规范化。

jQuery.event.mouseHooks

用于将一些属性从原来的MouseEvent转移到jQuery事件对象中。 标准化event.which(使用哪个鼠标按钮)跨浏览器,因为event.button 未标准化。 如果缺少pageXpageYclientXclientY 等,则计算它们并将它们设置为 jQuery 事件对象。

 

jQuery.event.keyHooks

用于将一些属性从原始KeyboardEvent 转移到jQuery 事件对象。 跨浏览器规范化event.which(按下按钮的字符代码)。在原始事件中,它可能是 charcharCodekeykeyCode

来自 jQuery 1.9.1 源代码。

【讨论】:

非常感谢您列出所有此类挂钩。我想我需要通篇阅读每个 jQuery src 代码。

以上是关于jQuery 中提供了哪些钩子?的主要内容,如果未能解决你的问题,请参考以下文章

vue生命周期

Vue3 生命周期钩子函数

在我的权限上下文提供程序的函数错误中调用了 React 钩子“useSelector”

什么是jQuery?

Vue里面提供的三大类钩子及两种函数

jquery的事件绑定