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 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
Jun 19 Javascript
js将字符串转成正则表达式的实现方法
Nov 13 Javascript
javascripit实现密码强度检测代码分享
Dec 12 Javascript
微信小程序 picker 组件详解及简单实例
Jan 10 Javascript
基于Jquery Ajax type的4种类型(详解)
Aug 02 jQuery
JS求Number类型数组中最大元素方法
Apr 08 Javascript
微信小程序实现笑脸评分功能
Nov 03 Javascript
Vue源码探究之状态初始化
Nov 14 Javascript
vue 之 css module的使用方法
Dec 04 Javascript
js字符串处理之绝妙的代码
Apr 05 Javascript
js之切换全屏和退出全屏实现代码实例
Sep 09 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 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
PHP Oauth授权和本地加密实现方法
2016/08/12 PHP
thinkphp修改配置进入默认首页的方法
2017/02/07 PHP
Yii2使用$this->context获取当前的Module、Controller(控制器)、Action等
2017/03/29 PHP
PHP基于curl post实现发送url及相关中文乱码问题解决方法
2017/11/25 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
jQuery EasyUI API 中文文档 - EasyLoader 加载器
2011/09/29 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
JavaScript鼠标特效大全
2016/09/13 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
Angular的自定义指令以及实例
2016/12/26 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
python用字典统计单词或汉字词个数示例
2014/04/22 Python
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
python杀死一个线程的方法
2015/09/06 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
python查看列的唯一值方法
2018/07/17 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
Python列表切片常用操作实例解析
2019/12/16 Python
pymysql模块的操作实例
2019/12/17 Python
Python多进程编程常用方法解析
2020/03/26 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
Abbacino官网:包、钱包和女士配饰
2019/04/15 全球购物
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
满月酒答谢词
2014/01/14 职场文书
升学宴主持词
2014/04/02 职场文书
先进工作者推荐材料
2014/12/23 职场文书
2015年教研员工作总结
2015/05/26 职场文书
2015年暑期社会实践报告
2015/07/13 职场文书
高一作文之乐趣
2019/11/21 职场文书