Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3


Posted in Javascript onMarch 22, 2008

var patterns = {
    HYPHEN: /(-[a-z])/i,
    ROOT_TAG: /^body|html$/i
};

var toCamel = function(property) {
    // 如果没有 -[a-z] 字母,则直接返回
    if ( !patterns.HYPHEN.test(property) ) {
        return property;
    }

    // 如果有缓存,直接返回替换后的值
    if (propertyCache[property]) {
        return propertyCache[property];
    }

    // 使用正则替换
    var converted = property;
    while( patterns.HYPHEN.exec(converted) ) {
        converted = converted.replace(RegExp.$1,
                RegExp.$1.substr(1).toUpperCase());
    }

    // 存入缓存
    propertyCache[property] = converted;
    return converted;
};在 YAHOO.util.Dom 中,getStyle 函数考虑了更多不同浏览器兼容性方面的问题,代码如下

// 使用 W3C DOM 标准的浏览器,比如 Firefox、Opera、Safari
if (document.defaultView && document.defaultView.getComputedStyle) {
    getStyle = function(el, property) {
        var value = null;

        // 重命名部分 CSS 样式名
        if (property == 'float') {
            property = 'cssFloat';
        }

        // 获取通过 CSS 加上去的属性
        var computed = document.defaultView.getComputedStyle(el, '');
        if (computed) {
            value = computed[toCamel(property)];
        }

        return el.style[property] || value;
    };
// 如果是 IE 浏览器
} else if (document.documentElement.currentStyle && isIE) {
    getStyle = function(el, property) {                         
        switch( toCamel(property) ) {
            // “转换”名称为 IE 可以认识的
            case 'opacity' :
                var val = 100;
                try {
                    val = 
                        el.filters['DXImageTransform.Microsoft.Alpha'].opacity;
                } catch(e) {
                    try {
                        val = el.filters('alpha').opacity;
                    } catch(e) {
                    }
                }
                // 百分比
                return val / 100;
            case 'float': 
                property = 'styleFloat'; 
            default: 
                var value = el.currentStyle ? el.currentStyle[property] : null;
                return ( el.style[property] || value );
        }
    };
} else {
    // 获取内联样式
    getStyle = function(el, property) { return el.style[property]; };
}另外,PPK 在他的 Blog 上的有关 getStyle 的阐述,也很精彩,有兴趣的可以去看下。

Javascript 相关文章推荐
JQuery 自定义CircleAnimation,Animate方法学习笔记
Jul 10 Javascript
Jquery中对数组的操作代码
Aug 12 Javascript
JQuery 常用方法和事件详细介绍
Apr 18 Javascript
jquery中的事件处理详细介绍
Jun 24 Javascript
jQuery操作JSON的CRUD用法实例
Feb 25 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
JavaScript面向对象之私有静态变量实例分析
Jan 14 Javascript
jquery+CSS3实现3D拖拽相册效果
Jul 18 Javascript
jQuery模拟Marquee实现无缝滚动效果完整实例
Sep 29 Javascript
discuz表情的JS提取方法分析
Mar 22 Javascript
vue移动端项目缓存问题实践记录
Oct 29 Javascript
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.2 0
Mar 22 #Javascript
YUI 读码日记之 YAHOO.util.Dom - Part.1
Mar 22 #Javascript
YUI 读码日记之 YAHOO.lang.is*
Mar 22 #Javascript
详解new function(){}和function(){}() 区别分析
Mar 22 #Javascript
Javascript的一种模块模式
Mar 22 #Javascript
javascript cookie解码函数(兼容ff)
Mar 17 #Javascript
简单的JS多重继承示例
Mar 13 #Javascript
You might like
浅析PHP中strlen和mb_strlen的区别
2014/08/31 PHP
php针对cookie操作的队列操作类实例
2014/12/10 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
2017/03/31 PHP
php实现微信支付之企业付款
2018/05/30 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
Laravel重定向,a链接跳转,控制器跳转示例
2019/10/22 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
无缝滚动改进版支持上下左右滚动(封装成函数)
2012/12/04 Javascript
js对图片base64编码字符串进行解码并输出图像示例
2014/03/17 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
Javascript函数式编程语言
2015/10/11 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
bootstrap下拉列表与输入框组结合的样式调整
2016/10/08 Javascript
微信小程序 触控事件详细介绍
2016/10/17 Javascript
JS实现全屏的四种写法
2016/12/30 Javascript
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
JS跨浏览器解析XML应用过程详解
2020/10/16 Javascript
[01:31:22]Ti4 循环赛第四日附加赛LGD vs Mouz
2014/07/13 DOTA
Python实现的下载8000首儿歌的代码分享
2014/11/21 Python
Python中__init__.py文件的作用详解
2016/09/18 Python
详解python爬虫系列之初识爬虫
2019/04/06 Python
Python的matplotlib绘图如何修改背景颜色的实现
2019/07/16 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
2020/02/16 Python
css3实现二维码扫描特效的示例
2020/10/29 HTML / CSS
Mio Skincare法国官网:身体紧致及孕期身体护理
2018/04/04 全球购物
童装店创业计划书
2014/01/09 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
分居协议书范本(律师见证版)
2014/11/26 职场文书
模范班主任事迹材料
2014/12/17 职场文书
职代会闭幕词
2015/01/28 职场文书
python 调用js的四种方式
2021/04/11 Python
如何使用PyCharm及常用配置详解
2021/06/03 Python
Valheim服务器 Mod修改安装教程 【ValheimPlus】
2022/12/24 Servers