# jQuery.support

所属分类：内部属性 > 全局 jQuery 对象的属性 | 工具类 | 弃用 > 1.9 版本弃用的 API 英文文档：jQuery.support

## jQuery.support 返回: Object

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

- #### 添加的版本: 1.3jQuery.support

注：官网中以下全部内容已经被删除，我们强烈建议浏览器功能性检测不要使用`jQuery.support`上的属性。而使用比如Modernizr这样的外部类库！

与使用 `$.browser` 来检测 user agent 或者根据不同的浏览器改变页面的展示效果相比，使用功能检测是更好的作法。为了使该该过程变得更简单，jQuery 进行了很多这样的测试，来设置 `jQuery.support` 对象的属性。

由于 jQuery 内部需要使用这些方法来进行检测，所以它们会在每次加载页面时被执行。下面列出了一些可用于检测的属性，但是某些不建议使用的或被删除的属性并没有被列出来，因为这些属性不是讨论的重点，而且当 jQuery 的内部代码不再需要某些属性时，它们就会被移除。

以下是解释如何使用少的资源特征检测工作：

- http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting
- http://www.jibbering.com/faq/faq_notes/not_browser_detect.html
- http://yura.thinkweb2.com/cft/

对于你自己的项目功能检测的需求， 我们强烈建议使用外部库，比如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 标准化。)
  DOM l3 spec
- `htmlSerialize` 如果浏览器能够使用元素的 `.innerHTML` 属性来序列化/插入 `<link>` 元素的话，则返回 true。(目前在 IE 中会返回 false)。
  HTML5 WD
- `leadingWhitespace` 如果使用 .innerHTML 进行内容插入时，插入后的结果和所提供的内容完全一致，并且保留开头的空白字符，则返回 true。(在 IE 6-8 中返回 false)。
  HTML5 WD
- `noCloneChecked` 如果克隆后的 DOM 元素保持了 `.checked` expando 状态，则返回 true。 (目前在 IE 中会返回 false)。 (在 jQuery 1.5.1 中追加的该属性)
- `noCloneEvent` 如果克隆后的 DOM 元素上并没有被克隆元素上的事件(也就是说，源元素不是被克隆的。)，则返回 true。(目前在 IE 中会返回 false)。
  DOM l2 spec
- `opacity` 如果浏览器能正确的处理透明度属性，则返回 true。(目前在 IE 中会返回 false，因为 IE 使用了 alpha 滤镜来代替该属性)。
  CSS3 spec
- `optDisabled` 如果含有被禁用的 option 元素的 select 元素没有被自动禁用的话，则返回 true。
  HTML5 WD
- `optSelected` 如果被默认选中的 `<option>` 元素是通过 `selected` 属性被选中的，则返回 true。
  HTML5 WD
- `scriptEval()` 如果通过标准的 DOM 操作方法，例如，`.appendChild()` 和 `.createTextNode()`，向文档中插入内嵌脚本时，如果脚本被自动计算并执行了，则返回 true。(目前在 IE 中会返回 false，因为 IE 使用 `.text` 来插入可执行的脚本)。
  注意: 该属性在 jQuery 1.6 中已经被移除。在 jQuery 1.5.1 之前，`scriptEval()` 方法还是一个静态的 `scriptEval` 属性。将静态属性改成方法，允许测试被推迟到第一次使用时进行，是为了防止违反内嵌脚本的内容安全策略。
  HTML5 WD
- `style` 如果可以通过 DOM 属性访问元素的 inline 样式，以满足 DOM Level 2 规约，则返回 true。在这种情况下，使用 `.getAttribute('style')` 能够返回 style 的值。在 Internet Explorer 中，则要使用 `.cssText` 来达到相同的目的。
  DOM l2 Style spec
- `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`)。
  HTML5 spec

## 例子:

#### 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