概述 jQuery.support
返回值:Object
描述: 它们代表了不同的浏览器功能或错误存在的属性集合。当他们不再需要在内部以提高页面的启动性能时,这些特定属性可能会被删除。
对于你自己的项目功能检测的需求,
我们强烈建议使用外部库,比如Modernizr的,而不是依赖于jQuery.support
上的属性。
jQuery.support
上的属性。而使用比如Modernizr这样的外部类库!
与使用 $.browser
来检测 user agent 或者根据不同的浏览器改变页面的展示效果相比,使用功能检测是更好的作法。为了使该该过程变得更简单,jQuery 进行了很多这样的测试,来设置 jQuery.support
对象的属性。
由于 jQuery 内部需要使用这些方法来进行检测,所以它们会在每次加载页面时被执行。下面列出了一些可用于检测的属性,但是某些不建议使用的或被删除的属性并没有被列出来,因为这些属性不是讨论的重点,而且当 jQuery 的内部代码不再需要某些属性时,它们就会被移除。
以下是解释如何使用少的资源特征检测工作:
对于你自己的项目功能检测的需求,
我们强烈建议使用外部库,比如Modernizr的,而不是依赖于jQuery.support
上的属性。
在这些测试包括jQuery.support
如下:
ajax
如果浏览器能创建 XMLHttpRequest
对象,则返回 true。
boxModel
如果页面是根据 W3C CSS Box Model (当 IE 6 和 7 工作在 Quirks 模式下,该属性值是 false) 进行描绘的,则返回 true。在文档 ready 发生之前,该属性值一直是 null。
changeBubbles
如果 change 事件满足 W3C DOM event model 的要求,在 DOM 树中向上冒泡时,则返回 true。(目前 IE 会返回 false,因为冒泡行为是 jQuery 模拟的。)
checkClone
如果浏览器正确克隆了文档片断中的复选框或单选按键的状态,则返回 true。
checkOn
当复选框在没有赋值的情况下,其默认值是 "on",则返回 true。
cors
如果浏览器能创建 XMLHttpRequest
对象,并且该 XMLHttpRequest
对象含有 withCredentials
属性的话,则返回 true。在尚不支持 cors 属性,但是允许跨域 XHR 请求(例如 windows gadget, 等)的环境下,要启用跨域请求,请进行如下设置 $.support.cors = true;
。 CORS WD
cssFloat
如果属性值含有的 CSS float 值是 .cssFloat 的话,则返回 true。其中, .cssFloat 是在 CSS Spec 中定义的。(目前在 IE 中,该属性的返回值是 false,因为 IE 使用了 styleFloat 来代替该属性)。
hrefNormalized
如果 .getAttribute()
方法返回的 href
属性值没有发生变化,并不是标准化成完整的 URL 的话,则返回 true。(目前在 IE 中会返回 false,因为 IE 会将 URL 标准化。)
htmlSerialize
如果浏览器能够使用元素的 .innerHTML
属性来序列化/插入 <link>
元素的话,则返回 true。(目前在 IE 中会返回 false)。
leadingWhitespace
如果使用 .innerHTML 进行内容插入时,插入后的结果和所提供的内容完全一致,并且保留开头的空白字符,则返回 true。(在 IE 6-8 中返回 false)。
noCloneChecked
如果克隆后的 DOM 元素保持了 .checked
expando 状态,则返回 true。 (目前在 IE 中会返回 false)。 (在 jQuery 1.5.1 中追加的该属性)
noCloneEvent
如果克隆后的 DOM 元素上并没有被克隆元素上的事件(也就是说,源元素不是被克隆的。),则返回 true。(目前在 IE 中会返回 false)。
opacity
如果浏览器能正确的处理透明度属性,则返回 true。(目前在 IE 中会返回 false,因为 IE 使用了 alpha 滤镜来代替该属性)。
optDisabled
如果含有被禁用的 option 元素的 select 元素没有被自动禁用的话,则返回 true。
optSelected
如果被默认选中的 <option>
元素是通过 selected
属性被选中的,则返回 true。
scriptEval()
如果通过标准的 DOM 操作方法,例如,.appendChild()
和 .createTextNode()
,向文档中插入内嵌脚本时,如果脚本被自动计算并执行了,则返回 true。(目前在 IE 中会返回 false,因为 IE 使用 .text
来插入可执行的脚本)。
scriptEval()
方法还是一个静态的 scriptEval
属性。将静态属性改成方法,允许测试被推迟到第一次使用时进行,是为了防止违反内嵌脚本的内容安全策略。
style
如果可以通过 DOM 属性访问元素的 inline 样式,以满足 DOM Level 2 规约,则返回 true。在这种情况下,使用 .getAttribute('style')
能够返回 style 的值。在 Internet Explorer 中,则要使用 .cssText
来达到相同的目的。
submitBubbles
submit 事件根据 W3C DOM event model 的规定,能够在 DOM 树中向上冒泡,则返回 true。(目前在 IE 中会返回 false,因为冒泡行为是 jQuery 模拟的)。
tbody
如果允许一个空的 <table>
元素在没有 <tbody>
元素的情况下存在,则返回 true。根据 HTML 规范,<table>
的子元素是可选的,因此,在完全符合规范的浏览器中,该属性的值应该是 true。如果返回了 false,则我们必须要考虑浏览器隐式注入 <tbody>
标签的可能性。(目前在 IE 中会返回 false,因为如果通过 innerHTML
进行赋值的字符串中不存在 tbody
的话,则 IE 会自动插入 tbody
)。
示例
返回 iframe 的盒子模型。
<!DOCTYPE html>
<html>
<head>
<style>
p { color:blue; margin:20px; }
span { color:red; }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
<p>
</p>
<script>
$("p").html("This frame uses the W3C box model: <span>" +
jQuery.support.boxModel + "</span>");
</script>
</body>
</html>
在 Internet Explorer 中,访问的页面处于 QuirksMode,则返回 false。
jQuery.support.boxModel
Result:
false