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 将元素显示在屏幕的中央的代码
Feb 27 Javascript
js自定义事件及事件交互原理概述(一)
Feb 01 Javascript
函数window.open实现关闭所有的子窗口
Aug 03 Javascript
详解Bootstrap的iCheck插件checkbox和radio
Aug 24 Javascript
Javascript动画效果(3)
Oct 11 Javascript
vue2.0中click点击当前li实现动态切换class
Jun 21 Javascript
微信小程序自动客服功能
Nov 02 Javascript
vue利用axios来完成数据的交互
Mar 23 Javascript
原生JS实现随机点名项目的实例代码
Apr 30 Javascript
js 判断当前时间是否处于某个一个时间段内
Sep 19 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
vue+swiper实现左右滑动的测试题功能
Oct 30 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
Window 7/XP 安装Apache 2.4与PHP 5.4 的过程详解
2013/06/02 PHP
解析php安全性问题中的:Null 字符问题
2013/06/21 PHP
PHP中把有符号整型转换为无符号整型方法
2015/05/27 PHP
php使用COPY函数更新配置文件的方法
2015/06/18 PHP
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
jquery实现Slide Out Navigation滑出式菜单效果代码
2015/09/07 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
BootStrap智能表单实战系列(三)分块表单配置详解
2016/06/13 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
JavaScript 函数的定义-调用、注意事项
2017/04/16 Javascript
详解Angular2响应式表单
2017/06/14 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
python字符串加密解密的三种方法分享(base64 win32com)
2014/01/19 Python
Python实现的自定义多线程多进程类示例
2018/03/23 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
python生成九宫格图片
2018/11/19 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
简单了解如何封装自己的Python包
2020/07/08 Python
Python 在局部变量域中执行代码
2020/08/07 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
html5-Canvas可以在web中绘制各种图形
2012/12/26 HTML / CSS
英国第一职业高尔夫商店:Clickgolf.co.uk
2020/11/18 全球购物
中医临床专业自我鉴定范文
2014/01/15 职场文书
2014年高考决心书
2014/03/11 职场文书
社区文化建设方案
2014/05/02 职场文书
四川省传达学习贯彻党的群众路线教育实践活动总结大会精神新闻稿
2014/10/26 职场文书
贵阳市党的群众路线教育实践活动党(工)委领导班子整改方案
2014/10/26 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
史上最牛的辞职信
2015/02/28 职场文书
创业计划书之网络外卖
2019/10/31 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python