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实多级联动下拉菜单类,简单实现省市区联动菜单!
May 03 Javascript
JS截取字符串常用方法整理及使用示例
Oct 18 Javascript
推荐JavaScript实现继承的最佳方式
Nov 11 Javascript
2种jQuery 实现刮刮卡效果
Feb 01 Javascript
JavaScript的RequireJS库入门指南
Jul 01 Javascript
JavaScript简单生成 N~M 之间随机数的方法
Jan 13 Javascript
Bootstrap模态窗口源码解析
Feb 08 Javascript
微信小程序之页面拦截器的示例代码
Sep 07 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
Oct 21 Javascript
vue-cli构建项目下使用微信分享功能
May 28 Javascript
layui问题之模拟select点击事件的实例讲解
Aug 15 Javascript
js+canvas实现两张图片合并成一张图片的方法
Nov 01 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
如何在Laravel5.8中正确地应用Repository设计模式
2019/11/26 PHP
ThinkPHP5.1的权限控制怎么写?分享一个AUTH权限控制
2021/03/09 PHP
基于jquery的跨域调用文件
2010/11/19 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
获取客户端网卡MAC地址和IP地址实现JS代码
2013/03/17 Javascript
js获得指定控件输入光标的坐标兼容IE,Chrome,火狐等多种主流浏览器
2013/05/21 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
node.js中的fs.chmodSync方法使用说明
2014/12/18 Javascript
jQuery实现Div拖动+键盘控制综合效果的方法
2015/03/10 Javascript
JavaScript基于setTimeout实现计数的方法
2015/05/08 Javascript
jQuery+HTML5实现弹出创意搜索框层
2016/12/29 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
JavaScript数据类型和变量_动力节点Java学院整理
2017/06/26 Javascript
vue2中的keep-alive使用总结及注意事项
2017/12/21 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
[03:51]吞吞映像 每周精彩击杀top10第二弹
2014/06/25 DOTA
python遍历文件夹并删除特定格式文件的示例
2014/03/05 Python
python中异常报错处理方法汇总
2016/11/20 Python
Python+OpenCV人脸检测原理及示例详解
2020/10/19 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
python中如何实现将数据分成训练集与测试集的方法
2019/09/13 Python
使用pygame实现垃圾分类小游戏功能(已获校级二等奖)
2020/07/23 Python
通过实例解析python and和or使用方法
2020/11/14 Python
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
英国手机零售商:Metrofone
2019/03/18 全球购物
物流专业大学生的自我鉴定
2013/11/13 职场文书
应用数学自荐书范文
2013/11/24 职场文书
作风转变心得体会
2014/09/02 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
2014年减负工作总结
2014/12/10 职场文书
Django程序的优化技巧
2021/04/29 Python
使用Pytorch训练two-head网络的操作
2021/05/28 Python
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记