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 QQ客服悬浮效果实现代码
Dec 12 Javascript
jQuery 处理页面的事件详解
Jan 20 Javascript
js点击按钮实现带遮罩层的弹出视频效果
Dec 19 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
Jan 28 Javascript
逻辑表达式中与或非的用法详解
Jun 06 Javascript
bootstrap datepicker插件默认英文修改为中文
Jul 28 Javascript
js canvas实现简单的图像扩散效果
Jun 28 Javascript
5分钟学会Vue动画效果(小结)
Jul 21 Javascript
深入解析ES6中的promise
Nov 08 Javascript
新版小程序登录授权的方法
Dec 12 Javascript
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 Javascript
vue组件入门知识全梳理
Sep 21 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
论建造顺序的重要性
2020/03/04 星际争霸
《星际争霸2》终章已出 RTS时代宣告终结
2017/02/07 星际争霸
由php if 想到的些问题
2008/03/22 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
php 实现301重定向跳转实例代码
2016/07/18 PHP
php 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
thinkphp项目如何自定义微信分享描述内容
2017/02/20 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
2017/03/24 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
Laravel服务容器绑定的几种方法总结
2020/06/14 PHP
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
jqGrid中文文档之选项设置
2015/12/02 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
webpack项目调试以及独立打包配置文件的方法
2018/02/28 Javascript
jQuery实现的点击标题文字切换字体效果示例【测试可用】
2018/04/26 jQuery
解决angular2在双向数据绑定时[(ngModel)]无法使用的问题
2018/09/13 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
[33:28]完美世界DOTA2联赛PWL S3 PXG vs GXR 第三场 12.19
2020/12/24 DOTA
浅谈python编译pyc工程--导包问题解决
2019/03/20 Python
详解python执行shell脚本创建用户及相关操作
2019/04/11 Python
numpy.where() 用法详解
2019/05/27 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
python跨文件使用全局变量的实现
2020/11/17 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
pycharm 关闭search everywhere的解决操作
2021/01/15 Python
AmazeUI框架搭建的方法步骤(图文)
2020/08/17 HTML / CSS
美国木工工具和用品商店:Woodcraft
2019/10/30 全球购物
自我评价正确写法范文
2013/12/10 职场文书
工程服务质量承诺书
2015/04/29 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
Sql-Server数据库单表查询 4.3实验课
2021/04/05 SQL Server
javascript对象3个属性特征
2021/11/17 Javascript
Tomcat用户管理的优化配置详解
2022/03/31 Servers
Python接口自动化之文件上传/下载接口详解
2022/04/05 Python