【问题标题】:Which hooks are provided in jQuery?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等等。你可能想参考这些的源代码。

标签: jquery dom dom-events


【解决方案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 #10299Bug #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 代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 1970-01-01
  • 2010-11-06
  • 2014-04-22
相关资源
最近更新 更多