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 相关文章推荐
基于jQuery实现的当离开页面时出现提示的实现代码
Jun 27 Javascript
JS调试必备的5个debug技巧
Mar 07 Javascript
你可能不知道的JavaScript的new Function()方法
Apr 17 Javascript
js实现格式化金额,字符,时间的方法
Feb 26 Javascript
JS实现控制表格行文本对齐的方法
Mar 30 Javascript
javascript基于DOM实现权限选择实例分析
May 14 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
Oct 28 Javascript
BootStrap3使用错误记录及解决办法
Dec 22 Javascript
Vue兼容ie9的问题全面解决方案
Jun 19 Javascript
基于jquery实现的tab选项卡功能示例【附源码下载】
Jun 10 jQuery
详解element-ui中表单验证的三种方式
Sep 18 Javascript
基于ant design日期控件使用_仅月份的操作
Oct 27 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
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
关于PHP开发的9条建议
2015/07/27 PHP
php实现mysql连接池效果实现代码
2018/01/25 PHP
PHP实现生成推广海报的方法详解
2018/03/14 PHP
非常好用的JsonToString 方法 简单实例
2013/07/18 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
Vue中使用Lodop插件实现打印功能的简单方法
2019/12/19 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
python实现监控linux性能及进程消耗性能的方法
2014/07/25 Python
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
2019/08/22 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
python selenium自动化测试框架搭建的方法步骤
2020/06/14 Python
Smallable意大利家庭概念店:设计师童装及家居装饰
2018/01/08 全球购物
施华洛世奇巴西官网:SWAROVSKI巴西
2019/12/03 全球购物
建筑设计师岗位职责
2013/11/18 职场文书
中英文自我评价常用句型
2013/12/19 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
田径运动会开幕式及主持词
2014/03/28 职场文书
团拜会策划方案
2014/06/07 职场文书
教师年度考核个人总结
2015/02/12 职场文书
新闻稿格式范文
2015/07/18 职场文书
吃通javascript正则表达式
2021/04/21 Javascript
微信小程序scroll-view不能左右滑动问题的解决方法
2021/07/09 Javascript