jQuery(1.6.3) 中css方法对浮动的实现缺陷分析


Posted in Javascript onSeptember 09, 2011

jQuery的css方法统一了两种写法,直接使用float属性即可,如下css方法中传参数“float”即可以设置也可以获取元素的float。

<div id="d1">float div</div> 
<script type="text/javascript"> 
$('#d1').css('float', 'right'); 
var str = $('#d1').css('float'); 
alert(str); 
</script>

但jQuery非要自作聪明,加上对cssFloat和styleFloat的支持,见API文档,比如获取元素的float属性时,以下是等价的。
1 $('div.left').css('float');
2 $('div.left').css('cssFloat');
3 $('div.left').css('styleFloat');
但方式3在各个浏览器中返回值不同,比如使用styleFloat获取浮动
<div id="d1">float div</div> 
<script type="text/javascript"> 
alert($('#d1').css('styleFloat')); 
</script>

元素div没有设置浮动,因此默认应该返回“none”。但结果是
IE6/7/8 : 返回空字符串"none"
IE9/Firefox/Safari/Chrome/Opera : 返回空字符串
又如使用cssFloat设置浮动:
<div id="d1">float div</div> 
<script type="text/javascript"> 
$('#d1').css('cssFloat', 'right'); 
</script>

IE6/7/8:设置未成功
IE9/10/Firefox/Safari/Chrome/Opera:设置成功
又如使用styleFloat设置浮动:
<div id="d1">float div</div> 
<script type="text/javascript"> 
$('#d1').css('styleFloat', 'right'); 
</script>

IE6/7/8/9/10/Opera:设置成功(Opera是个怪胎,styleFloat和cssFloat都支持)
Firefox/Safari/Chrome:设置不成功
因此,使用css方法获取或设置浮动时为避免各浏览器差异还是老老实实的使用float。不要使用styleFloat或cssFloat。
当然如果这算jQuery的bug,那么修复也是很容易的
1,修改jQuery.css方法,加个styleFloat的判断。
// cssFloat needs a special treatment 
if ( name === "cssFloat" || name === "styleFloat") { 
name = "float"; 
}

这样使用$(xx).css("styleFloat") 就没有兼容性问题了。
2,修改jQuery.style方法,加个判断如果传styleFloat或cssFloat都转成float
// Don't set styles on text and comment nodes 
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { 
return; 
} 
// 这是加的修复代码 
if( name === "cssFloat" || name === "styleFloat" ) { 
name = "float" 
} 
// Make sure that we're working with the right name 
var ret, type, origName = jQuery.camelCase( name ), 
style = elem.style, hooks = jQuery.cssHooks[ origName ];

这样使用$(xx).css("cssFloat", "right") 或 $(xx).css("styleFloat", "right") 各浏览器就都ok了。
Javascript 相关文章推荐
js下写一个事件队列操作函数
Jul 19 Javascript
javascript 伪数组实现方法
Oct 11 Javascript
谷歌浏览器不支持showModalDialog模态对话框的解决方法
Sep 22 Javascript
jQuery中innerHeight()方法用法实例
Jan 19 Javascript
DOM基础教程之使用DOM设置文本框
Jan 20 Javascript
js实现点击文本框显示日期选择器特效代码分享
May 21 Javascript
微信小程序 教程之WXSS
Oct 18 Javascript
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
JS实现弹出下载对话框及常见文件类型的下载
Jul 13 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
Sep 18 Javascript
vue实现评论列表功能
Oct 25 Javascript
JS实现简易图片自动轮播
Oct 16 Javascript
详谈 Jquery Ajax异步处理Json数据.
Sep 09 #Javascript
$.ajax返回的JSON无法执行success的解决方法
Sep 09 #Javascript
yepnope.js 异步加载资源文件
Sep 08 #Javascript
jquery绑定原理 简单解析与实现代码分享
Sep 06 #Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
Sep 05 #Javascript
JQuery扩展插件Validate—4设置错误提示的样式
Sep 05 #Javascript
JQuery扩展插件Validate 3通过参数设置错误信息
Sep 05 #Javascript
You might like
咖啡与牛奶
2021/03/03 冲泡冲煮
图形数字验证代码
2006/10/09 PHP
显示程序执行时间php函数代码
2013/08/29 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
php数组操作之键名比较与差集、交集赋值的方法
2014/11/10 PHP
微信公众号开发之微信公共平台消息回复类实例
2014/11/14 PHP
php实现登录tplink WR882N获取IP和重启的方法
2016/07/20 PHP
javascript编程起步(第六课)
2007/02/27 Javascript
silverlight线程与基于事件驱动javascript引擎(实现轨迹回放功能)
2011/08/09 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
JS实现点击复选框将按钮或文本框变为灰色不可用的方法
2015/08/11 Javascript
js实现n秒倒计时后才可以点击的效果
2015/12/20 Javascript
javascript鼠标右键菜单自定义效果
2020/12/08 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
JQuery 封装 Ajax 常用方法(推荐)
2017/05/21 jQuery
JavaScript图片旋转效果实现方法详解
2020/06/28 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
Python优先队列实现方法示例
2017/09/21 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
在HTML5 Canvas中放入图片和保存为图片的方法
2014/05/03 HTML / CSS
AE美国鹰美国官方网站:American Eagle Outfitters
2016/08/22 全球购物
时尚休闲吧创业计划书
2014/01/25 职场文书
初中生操行评语大全
2014/04/24 职场文书
师德演讲稿范文
2014/05/06 职场文书
设计师求职信
2014/07/01 职场文书
无房证明范本
2014/09/17 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
闪闪的红星观后感
2015/06/08 职场文书
企业宣传语大全
2015/07/13 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
Python通过loop.run_in_executor执行同步代码 同步变为异步
2022/04/11 Python
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python