jQuery.support


jQuery.support返回: Object

描述: 它们代表了不同的浏览器功能或错误存在的属性集合。当他们不再需要在内部以提高页面的启动性能时,这些特定属性可能会被删除。 对于你自己的项目功能检测的需求, 我们强烈建议使用外部库,比如Modernizr的,而不是依赖于jQuery.support上的属性。

  • 添加的版本: 1.3jQuery.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 来插入可执行的脚本)。
    注意: 该属性在 jQuery 1.6 中已经被移除。在 jQuery 1.5.1 之前,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)。

例子:

Example: 返回 iframe 的盒子模型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<style>
p { color:blue; margin:20px; }
span { color:red; }
</style>
<script src="https://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>

Demo:

Example: 在 Internet Explorer 中,访问的页面处于 QuirksMode,则返回 false。

1
jQuery.support.boxModel

Result:

1
false