- 浏览: 426181 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
xiaomuxingren:
你好,请问update-alternatives --inst ...
JDK8安装及jenkins安装 -
wahahachuang8:
我觉得这种东西自己开发太麻烦了,就别自己捣鼓了,找个第三方,方 ...
HTML5 WebSocket -
晨曦的朝阳:
刚好有需求,学习一下!
MySql主从配置 -
mfkvfn:
这是恶意的商业竞争呀
解决 android 微信5.0及后续版本无法打开电话号码的问题 -
fwyhf:
require('./monitor/module_liste ...
NodeJS Server 进程自动重启
jQuery中的support对象
- 博客分类:
- jQuery
jQuery.support是为了替换jQuery.browser而来。
browser带着版本号的信息,浏览器有更新(IE10)时,很多以前的判断条件都不生效,所以更改为对特性的支持,以此来区分浏览器的不同。
browser带着版本号的信息,浏览器有更新(IE10)时,很多以前的判断条件都不生效,所以更改为对特性的支持,以此来区分浏览器的不同。
(function( jQuery ) { jQuery.support = (function() { var support, all, a, select, opt, input, fragment, tds, events, eventName, i, isSupported, div = document.createElement( "div" ), documentElement = document.documentElement; // Preliminary tests div.setAttribute("className", "t"); div.innerHTML = " <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>"; all = div.getElementsByTagName( "*" ); a = div.getElementsByTagName( "a" )[ 0 ]; // Can't get basic test support // 如果不支持getElementsByTagName()方法,则支持返回空对象, if ( !all || !all.length || !a ) { return {}; } // First batch of supports tests select = document.createElement( "select" ); opt = select.appendChild( document.createElement("option") ); input = div.getElementsByTagName( "input" )[ 0 ]; support = { // IE strips leading whitespace when .innerHTML is used // IE下.innerHTML将左右空格去除,得到的nodeType === 1 leadingWhitespace: ( div.firstChild.nodeType === 3 ), // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables // IE往空的table添加tbody标签 tbody: !div.getElementsByTagName("tbody").length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE // 在IE下查找link的长度为0,需要将link内容包含在dom元素中 htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute // (IE uses .cssText instead) // IE中使用a.getAttribute("style").cssText来获取style中的文本信息 style: /top/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) // IE中a的getAttribute方法默认将href属性转义成绝对路径,网上有个网页分析得非常得当 hrefNormalized: ( a.getAttribute("href") === "/a" ), // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity: /^0.55/.test( a.style.opacity ), // Verify style float existence // (IE uses styleFloat instead of cssFloat) // 浏览器的差异 cssFloat: !!a.style.cssFloat, // Make sure that if no value is specified for a checkbox // that it defaults to "on". // (WebKit defaults to "" instead) // 在chrome中 defaults为on,是否jQuery中有存在问题 checkOn: ( input.value === "on" ), // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) // 测试是否支持驼峰式的样式,如果支持,在IE6和IE7的get/setAttribute方法中采用attrFixes修正 getSetAttribute: div.className !== "t", // Tests for enctype support on a form(#6743) // 测试form是否支持enctype enctype: !!document.createElement("form").enctype, // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works // 确保克隆一个html5元素时不会导致问题 html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav></:nav>", // 所以,现在我们不需要这些 // Will be defined later submitBubbles: true, changeBubbles: true, focusinBubbles: false, deleteExpando: true, noCloneEvent: true, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, reliableMarginRight: true, pixelMargin: true }; // jQuery.boxModel DEPRECATED in 1.3, use jQuery.support.boxModel instead jQuery.boxModel = support.boxModel = (document.compatMode === "CSS1Compat"); // Make sure checked status is properly cloned input.checked = true; support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled // (WebKit marks them as disabled) select.disabled = true; support.optDisabled = !opt.disabled; // Test to see if it's possible to delete an expando from an element // Fails in Internet Explorer try { delete div.test; } catch( e ) { support.deleteExpando = false; } if ( !div.addEventListener && div.attachEvent && div.fireEvent ) { div.attachEvent( "onclick", function() { // Cloning a node shouldn't copy over any // bound event handlers (IE does this) support.noCloneEvent = false; }); div.cloneNode( true ).fireEvent( "onclick" ); } // Check if a radio maintains its value // after being appended to the DOM // 加入一个radio后,查看是否仍保留它的值 input = document.createElement("input"); input.value = "t"; input.setAttribute("type", "radio"); support.radioValue = input.value === "t"; input.setAttribute("checked", "checked"); // #11217 - WebKit loses check when the name is after the checked attribute input.setAttribute( "name", "t" ); div.appendChild( input ); fragment = document.createDocumentFragment(); fragment.appendChild( div.lastChild ); // WebKit doesn't clone checked state correctly in fragments // WebKit克隆时不支持checked状态 support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) support.appendChecked = input.checked; fragment.removeChild( input ); fragment.appendChild( div ); // Technique from Juriy Zaytsev // http://perfectionkills.com/detecting-event-support-without-browser-sniffing/ // We only care about the case where non-standard event systems // are used, namely in IE. Short-circuiting here helps us to // avoid an eval call (in setAttribute) which can cause CSP // to go haywire. See: https://developer.mozilla.org/en/Security/CSP if ( div.attachEvent ) { for ( i in { submit: 1, change: 1, focusin: 1 }) { eventName = "on" + i; isSupported = ( eventName in div ); if ( !isSupported ) { div.setAttribute( eventName, "return;" ); isSupported = ( typeof div[ eventName ] === "function" ); } support[ i + "Bubbles" ] = isSupported; } } fragment.removeChild( div ); // Null elements to avoid leaks in IE fragment = select = opt = div = input = null; // Run tests that need a body at doc ready jQuery(function() { var container, outer, inner, table, td, offsetSupport, marginDiv, conMarginTop, style, html, positionTopLeftWidthHeight, paddingMarginBorderVisibility, paddingMarginBorder, body = document.getElementsByTagName("body")[0]; if ( !body ) { // Return for frameset docs that don't have a body return; } conMarginTop = 1; paddingMarginBorder = "padding:0;margin:0;border:"; positionTopLeftWidthHeight = "position:absolute;top:0;left:0;width:1px;height:1px;"; paddingMarginBorderVisibility = paddingMarginBorder + "0;visibility:hidden;"; style = "style='" + positionTopLeftWidthHeight + paddingMarginBorder + "5px solid #000;"; html = "<div " + style + "display:block;'><div style='" + paddingMarginBorder + "0;display:block;overflow:hidden;'></div></div>" + "<table " + style + "' cellpadding='0' cellspacing='0'>" + "<tr><td></td></tr></table>"; container = document.createElement("div"); container.style.cssText = paddingMarginBorderVisibility + "width:0;height:0;position:static;top:0;margin-top:" + conMarginTop + "px"; body.insertBefore( container, body.firstChild ); // Construct the test element div = document.createElement("div"); container.appendChild( div ); // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). // (only IE 8 fails this test) div.innerHTML = "<table><tr><td style='" + paddingMarginBorder + "0;display:none'></td><td>t</td></tr></table>"; tds = div.getElementsByTagName( "td" ); isSupported = ( tds[ 0 ].offsetHeight === 0 ); tds[ 0 ].style.display = ""; tds[ 1 ].style.display = "none"; // Check if empty table cells still have offsetWidth/Height // (IE <= 8 fail this test) support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); // Check if div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container. For more // info see bug #3333 // Fails in WebKit before Feb 2011 nightlies // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right if ( window.getComputedStyle ) { div.innerHTML = ""; marginDiv = document.createElement( "div" ); marginDiv.style.width = "0"; marginDiv.style.marginRight = "0"; div.style.width = "2px"; div.appendChild( marginDiv ); support.reliableMarginRight = ( parseInt( ( window.getComputedStyle( marginDiv, null ) || { marginRight: 0 } ).marginRight, 10 ) || 0 ) === 0; } if ( typeof div.style.zoom !== "undefined" ) { // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout // (IE < 8 does this) div.innerHTML = ""; div.style.width = div.style.padding = "1px"; div.style.border = 0; div.style.overflow = "hidden"; div.style.display = "inline"; div.style.zoom = 1; support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); // Check if elements with layout shrink-wrap their children // (IE 6 does this) div.style.display = "block"; div.style.overflow = "visible"; div.innerHTML = "<div style='width:5px;'></div>"; support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); } div.style.cssText = positionTopLeftWidthHeight + paddingMarginBorderVisibility; div.innerHTML = html; outer = div.firstChild; inner = outer.firstChild; td = outer.nextSibling.firstChild.firstChild; offsetSupport = { doesNotAddBorder: ( inner.offsetTop !== 5 ), doesAddBorderForTableAndCells: ( td.offsetTop === 5 ) }; inner.style.position = "fixed"; inner.style.top = "20px"; // safari subtracts parent border width here which is 5px offsetSupport.fixedPosition = ( inner.offsetTop === 20 || inner.offsetTop === 15 ); inner.style.position = inner.style.top = ""; outer.style.overflow = "hidden"; outer.style.position = "relative"; offsetSupport.subtractsBorderForOverflowNotVisible = ( inner.offsetTop === -5 ); offsetSupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== conMarginTop ); if ( window.getComputedStyle ) { div.style.marginTop = "1%"; support.pixelMargin = ( window.getComputedStyle( div, null ) || { marginTop: 0 } ).marginTop !== "1%"; } if ( typeof container.style.zoom !== "undefined" ) { container.style.zoom = 1; } body.removeChild( container ); marginDiv = div = container = null; jQuery.extend( support, offsetSupport ); }); return support; })(); })( jQuery );
发表评论
-
jQuery链式操作实现原理 (Array-Like Object)
2012-05-07 01:13 2799jQuery链式代码风格:jQuery(“#one_div”) ... -
jQuery中的traversing查找及遍历
2012-04-19 00:21 1771jQuery提供了一整套非常好用的遍历Dom树节点的API,下 ... -
对于jQuery中的queue和data的理解
2012-04-05 00:37 0现在还有几个大块:event,attr,css,ajax ... -
从jQuery中抽取工具函数
2012-04-05 00:07 1932每一个JS框架中都首先包含一些工具函数,为框架代码打下基础: ... -
jQuery1.7中的Callbacks
2012-03-30 01:35 2626严格来讲,jQuery的Callback对象只是对于回调的一种 ... -
jQuery的各种分支及如何做符合自己的前端框架
2012-03-28 01:50 2526话说现在已经是知识大爆炸的年代,不管你想到什么 ... -
Moving Items(jQuery扩展)
2010-11-16 20:27 1314列表移动例子,对比过网上的很多实例,当前组件突 ...
相关推荐
在这个例子中,我们检查`document.body.style`对象中是否存在`transition`属性。如果存在,说明浏览器支持CSS3过渡效果,`jQuery.support.cssTransitions` 就会被设置为`true`。 jQuery的源码中,`jQuery.support` ...
- `get()`和`get(index)`:获取jQuery对象中对应索引的DOM元素,无参数时返回所有元素的数组。 - `index([subject])`:返回元素在兄弟元素中的相对位置,或相对于指定元素的位置。 **数据缓存** - `data([name])`...
在`jQuery.support`模块中,包含了一系列的浏览器特性检测,这些检测包括但不限于: - ajax:检测浏览器是否支持原生的`XMLHttpRequest`对象。 - boxModel:确定浏览器是否遵循W3C CSS盒模型。 - changeBubbles:...
3. **$.support对象**:这个对象在1.3版本中被引入,用于检测浏览器的特性支持,帮助开发者编写兼容性良好的代码。 4. **更多的选择器**:jQuery1.3扩展了选择器,包括`:even`、`:odd`、`:eq()`、`:gt()`、`:lt()`...
例如,这个版本改进了事件处理的效率,减少了内存占用,还引入了新的API,如`$.support`对象,用于检测浏览器特性和兼容性。 在使用《jQuery 1.10 中文 chm》帮助手册时,你可以通过搜索功能快速找到特定的API或...
- **遍历**: `each()` 方法允许遍历jQuery对象中的每个元素。 - **DOM操作**: `appendTo()`、`appendTo()`、`before()` 和 `after()` 方法用于插入元素。 - **事件**: `bind()`、`unbind()`、`trigger()` 用于事件...
jQuery提供了一系列的特性检测函数,如`$.support`对象,帮助开发者判断浏览器是否支持特定的CSS属性、DOM操作或JavaScript特性。 8. **性能优化(Performance Optimization)** 在1.7.2版本中,jQuery对DOM操作...
5. **AJAX(Ajax)**:jQuery的`$.ajax()`方法是进行异步数据请求的核心,1.7版本加强了错误处理和Promise对象的支持,使得异步编程更加易用。 6. **插件(Plugins)**:jQuery的生态系统中,插件是其重要组成部分...
7. **插件支持(Plugin Support)**:jQuery拥有丰富的插件生态系统,1.7版本中,开发者可以通过`$.fn.extend()`来扩展jQuery对象,创建自己的插件,以满足各种定制需求。 8. **版本兼容性(Version Compatibility...
1.8系列引入了重要的$.support对象,用于检测浏览器特性,还优化了$.each方法,提升了性能。尽管这个版本可能不包含最新的功能,但它对早期浏览器的支持和较小的体积,使其在某些情况下仍然是一个不错的选择,特别是...
- **$.support对象**: 1.6引入了`$.support`对象,用于检测浏览器对某些特性或行为的支持情况,方便开发者编写兼容性代码。 ### 使用Adobe AIR运行 为了运行这个“JQAPI1.6_air”程序,你需要首先安装Adobe AIR,...
进而通过“构造jquery对象”章节分析了构造函数jquery()的各种用法和内部构造过程;接着详细分析了底层支持模块的源码实现,包括:选择器sizzle、异步队列deferred、数据缓存data、队列queue、浏览器功能测试support...
最后,jQuery.globalEval()函数可以全局执行一段JavaScript代码,与eval()函数相似,但其作用域是全局的,而jQuery.map()函数则用于将数组或对象中的每个元素映射到新的数组中,根据回调函数返回值重新构建数组。...
源码中的`jQuery.support`对象记录了浏览器的特性,`jQuery.browser`则提供了浏览器信息,这些都是为了确保在各种环境下稳定运行。 10. **性能优化** jQuery 1.12版本在性能优化上下了不少功夫,如缓存DOM查询结果...
8. **API接口**:jQuery 1.10.3 API文档详细列出了所有可用的方法、属性和事件,如`$.each()`用于迭代对象或数组,`$.isFunction()`判断是否为函数类型,`$.support`对象提供了浏览器特性检测。 通过学习这份...
3. **$.support**: 这个对象用来检测浏览器的特性,`jQuery Migrate` 会更新一些不再自动检测的特性。 4. **Event特殊事件**: 一些旧的事件处理方式可能在新版本中被移除,`jQuery Migrate` 会恢复它们。 使用 `...
`$.support`对象在jQuery 1.7中进行了更新,包含了更多关于浏览器特性的检测,帮助开发者更好地了解用户所使用的浏览器是否支持特定的功能。 8. **$.each() 的优化** `$.each()`方法在1.7中进行了性能优化,处理...
2. **$.support对象**:对`.support`对象进行了调整,提供了更多关于浏览器特性的检测,帮助开发者判断当前环境是否支持特定功能。 3. **$.trim()**:改进了字符串修剪功能,处理空格和换行更加准确。 4. **$....
1. **$.support**: 在1.7版本中,$.support对象新增了一些属性,用于检测浏览器特性,如`$.support.leadingWhitespace`用来检测浏览器是否支持元素的leading whitespace。 2. **$.Callbacks**: 引入了新的回调函数...
4. **$.support对象的改进**:$.support对象新增了一些属性,用于检测浏览器特性,帮助开发者判断哪些功能在目标浏览器中可用。 ### JavaScript 1.4到1.6.1 API帮助 这部分内容可能包括了JavaScript语言从1.4版本到...