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判断元素是否存在的可靠方法
May 06 Javascript
node.js开机自启动脚本文件
Dec 24 Javascript
在javascript中随机数 math random如何生成指定范围数值的随机数
Oct 21 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
Dec 03 Javascript
基于javascript实现的快速排序
Dec 02 Javascript
基于JavaScript实现轮播图原理及示例
Apr 10 Javascript
微信小程序登录态控制深入分析
Apr 12 Javascript
JS库中的Particles.js在vue上的运用案例分析
Sep 13 Javascript
基于angular6.0实现的一个组件懒加载功能示例
Apr 12 Javascript
vuex与组件联合使用的方法
May 10 Javascript
vue使用swiper.js重叠轮播组建样式
Nov 14 Javascript
node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)
Feb 06 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
oracle资料库函式库
2006/10/09 PHP
PHP中$_SERVER的详细参数与说明
2008/07/29 PHP
关于Iframe如何跨域访问Cookie和Session的解决方法
2013/04/15 PHP
php随机显示指定文件夹下图片的方法
2015/07/13 PHP
权威JavaScript 中的内存泄露模式
2007/08/13 Javascript
用Javascript同时提交多个Web表单的方法
2009/12/26 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
input禁止键盘及中文输入,但可以点击
2014/02/13 Javascript
javascript中createElement的两种创建方式
2015/05/14 Javascript
RequireJS使用注意细节
2016/05/15 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
vue 引入公共css文件的简单方法(推荐)
2018/01/20 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
JS Web Flex弹性盒子模型代码实例
2020/03/10 Javascript
[39:02]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs VGJ.T
2018/04/01 DOTA
Python接收Gmail新邮件并发送到gtalk的方法
2015/03/10 Python
利用QT写一个极简单的图形化Python闹钟程序
2015/04/07 Python
python使用pil生成图片验证码的方法
2015/05/08 Python
python提取字典key列表的方法
2015/07/11 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
在Pandas中DataFrame数据合并,连接(concat,merge,join)的实例
2019/01/29 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
关于numpy数组轴的使用详解
2019/12/05 Python
Python+opencv+pyaudio实现带声音屏幕录制
2019/12/23 Python
基于html5绘制圆形多角图案
2016/04/21 HTML / CSS
HTML5去掉输入框type为number时的上下箭头的实现方法
2020/01/03 HTML / CSS
SQL Server 2000数据库的文件有哪些,分别进行描述
2013/03/30 面试题
国际贸易专业推荐信
2013/11/15 职场文书
期中考试后的反思
2014/02/08 职场文书
老干部工作汇报材料
2014/10/28 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
详解使用 CSS prefers-* 规范提升网站的可访问性与健壮性
2021/05/25 HTML / CSS
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python