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 相关文章推荐
起点页面传值js,有空研究学习下
Jan 25 Javascript
jquery实现背景墙聚光灯效果示例分享
Mar 02 Javascript
Node.js编码规范
Jul 14 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
Mar 03 Javascript
详细解读JavaScript的跨浏览器事件处理
Aug 12 Javascript
JS实现选定指定HTML元素对象中指定文本内容功能示例
Feb 13 Javascript
详解Webstorm 新建.vue文件支持高亮vue语法和es6语法
Oct 26 Javascript
switchery按钮的使用方法
Dec 18 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
小程序实现抽奖动画
Apr 16 Javascript
封装 axios+promise通用请求函数操作
Aug 11 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
B2K与车机的中波PK
2021/03/02 无线电
非常好的php目录导航文件代码
2006/10/09 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
在Windows XP下安装Apache+MySQL+PHP环境
2015/02/22 PHP
JS JavaScript获取Url参数,src属性参数
2021/03/09 Javascript
JavaScript快速检测浏览器对CSS3特性的支持情况
2012/09/26 Javascript
jQuery.prototype.init选择器构造函数源码思路分析
2013/02/05 Javascript
JS的document.all函数使用示例
2013/12/30 Javascript
JavaScript数组和循环详解
2015/04/27 Javascript
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
JS中call/apply、arguments、undefined/null方法详解
2016/02/15 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
关于bootstrap日期转化,bootstrap-editable的简单使用,bootstrap-fileinput的使用详解
2017/05/12 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
微信小程序实现跟随菜单效果和循环嵌套加载数据
2017/11/21 Javascript
vue中本地静态图片路径写法
2018/03/06 Javascript
vue.js添加一些触摸事件以及安装fastclick的实例
2018/08/28 Javascript
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
python多进程提取处理大量文本的关键词方法
2018/06/05 Python
使用pandas对两个dataframe进行join的实例
2018/06/08 Python
python ChainMap的使用和说明详解
2019/06/11 Python
如何运行.ipynb文件的图文讲解
2019/06/27 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
使用python绘制cdf的多种实现方法
2020/02/25 Python
python dict乱码如何解决
2020/06/07 Python
西班牙电子产品购物网站:Electronicamente
2018/07/26 全球购物
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
公务员的自我鉴定
2013/10/26 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
销售会议开幕词
2016/03/04 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python
Java字符串逆序方法详情
2022/03/21 Java/Android