请问jQuery中csshook跟css方法有什么区别?
csshook api的定义如下,有朋友能帮忙翻译一下吗:
Hook directly into jQuery to override how particular CSS properties are retrieved or set, normalize CSS property naming, or create custom properties.
hook就是勾子,WIN 32 API编程里常用的手段(在DOS时代也有,即中断拦截,意思与功能类似)。
csshook和css方法的区别是:
csshook是追加css类,而css是设置。
比如:
<div class="a"></div>
对这个对象使用css("b"),结果是:
<div class="b"></div>
而对这个对象使用csshook("b"),结果是:
<div class="a b"></div>
那么class="a b"有什么特点呢?
假设css中的定义:
.a
{
font-size:12px;
color:red;
}
.b
{
font-family:楷体;
color:blue;
}
class="a b"的结果就等同于设置了下面的样式:
{
font-size:12px;
color:red;
font-family:楷体;
color:blue;
}
两个color的设置有冲突,浏览器会进行过滤处理,以最后一次的结果为准,即:
{
font-size:12px;
font-family:楷体;
color:blue;
}
多浏览器样式兼容使用的就是类似的冲突解决方案,即所谓的csshack技术(CSS黑客,确实有点黑客的味道)。
比如:
<div class="a"></div>
对这个对象使用css("b"),结果是:
<div class="b"></div>
而对这个对象使用csshook("b"),结果是:
<div class="a b"></div>
这里说的有问题,没有css("b")这种用法,设置样式要用.attr("class","b");追加样式用addClass("b"),另外csshook好像不是这么用的
@artwl: 我对jquery并不熟悉,只是凭个人主观臆测的。从hook的字意以及那段英文的大致意思分析的。
至于css方法,不过是举个例子,没去查阅是否有这个方法。
挂钩实际上是jQuery命名空间中的数组,比如$.cssHooks、$.attrHooks。一
般来说,挂钩是保存着get和set方法的对象,前者用于取得请求的值,后者的作用则是提供新值。
以下是其他几种挂钩:
挂钩类型 修改的方法 示例用法
$.attrHooks .attr() 阻止元素的type属性被修改
$.cssHooks .css() 对Internet Explorer中的opacity进行特殊处理
$.propHooks .prop() 纠正Safari中selected属性的行为
$.valHooks .val() 支持单选按钮和复选框跨浏览器报告一致的值
通常,这些挂钩所做的工作对我们而言是完全不可见的,我们不必知道它们都做了什么就可
以利用它们提供的便利。