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 相关文章推荐
用jscript启动sqlserver
Jun 21 Javascript
JQuery入门——用映射方式绑定不同事件应用示例
Feb 05 Javascript
document.documentElement的一些使用技巧
Apr 18 Javascript
jQuery图片滚动图片的效果(另类实现)
Jun 02 Javascript
在JavaScript中判断整型的N种方法示例介绍
Jun 18 Javascript
jQuery可见性过滤选择器用法示例
Sep 09 Javascript
ES6概念 Symbol toString()方法
Dec 25 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
JS控件bootstrap suggest plugin使用方法详解
Mar 25 Javascript
webpack打包js的方法
Mar 12 Javascript
利用vue重构有赞商城的思路以及总结整理
Feb 21 Javascript
扫微信小程序码实现网站登陆实现解析
Aug 20 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 冲泡冲煮
php权重计算方法代码分享
2014/01/09 PHP
PHP+MYSQL会员系统的开发实例教程
2014/08/23 PHP
php简单实现发送带附件的邮件
2015/06/10 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
js 第二代身份证号码的验证机制代码
2011/05/12 Javascript
一个页面放2段图片滚动代码出现冲突的问题如何解决
2012/12/21 Javascript
JavaScript Ajax Json实现上下级下拉框联动效果实例代码
2013/11/23 Javascript
JS、jquery实现几分钟前、几小时前、几天前等时间差显示效果的代码实例分享
2014/04/11 Javascript
jQuery中Ajax的get、post等方法详解
2015/01/20 Javascript
javascript实现控制文字大中小显示
2015/04/28 Javascript
jQuery时间插件jquery.clock.js用法实例(5个示例)
2016/01/14 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
全面解析js中的原型,原型对象,原型链
2021/01/25 Javascript
python实现的文件夹清理程序分享
2014/11/22 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
python+django加载静态网页模板解析
2017/12/12 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
浅谈pandas中DataFrame关于显示值省略的解决方法
2018/04/08 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
解决tensorflow模型参数保存和加载的问题
2018/07/26 Python
在Python中输入一个以空格为间隔的数组方法
2018/11/13 Python
win10下安装Anaconda的教程(python环境+jupyter_notebook)
2019/10/23 Python
快速查找Python安装路径方法
2020/02/06 Python
重构Python代码的六个实例
2020/11/25 Python
利用HTML5+css3+jquery+weui实现仿微信聊天界面功能
2018/01/08 HTML / CSS
详解HTML5中的拖放事件(Drag 和 drop)
2016/11/14 HTML / CSS
Club Monaco加拿大官网:设计师男女服装
2019/09/29 全球购物
德国专业木制品经销商:Holz-Direkt24
2019/12/26 全球购物
什么是.net
2015/08/03 面试题
Solaris操作系统的线程机制
2012/12/23 面试题
银行领导证婚词
2014/01/11 职场文书
商场拾金不昧表扬信
2014/01/13 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书