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遍历 table的脚本
Jul 23 Javascript
JQUERY获取form表单值的代码
Jul 17 Javascript
javascript Window及document对象详细整理
Jan 12 Javascript
JavaScript高级程序设计 DOM学习笔记
Sep 10 Javascript
浅谈javascript中call()、apply()、bind()的用法
Apr 20 Javascript
详解JSONObject和JSONArray区别及基本用法
Oct 25 Javascript
利用原生js实现html5小游戏之打砖块(附源码)
Jan 03 Javascript
在Vue 中使用Typescript的示例代码
Sep 10 Javascript
javascript设计模式 ? 访问者模式原理与用法实例分析
Apr 26 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
Jul 22 Javascript
vue组件开发之tab切换组件使用详解
Aug 21 Javascript
vue2实现provide inject传递响应式
May 21 Vue.js
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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
PHP6 先修班 JSON实例代码
2008/08/23 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
ThinkPHP添加更新标签的方法
2014/12/05 PHP
Symfony2创建页面实例详解
2016/03/18 PHP
JS宝典学习笔记(下)
2007/01/10 Javascript
js中cookie的使用详细分析
2008/05/28 Javascript
浅析javascript闭包 实例分析
2010/12/25 Javascript
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JavaScript获取页面上被选中文字的方法技巧
2015/03/13 Javascript
js实现iframe框架取值的方法(兼容IE,firefox,chrome等)
2015/11/26 Javascript
Node.js 文件夹目录结构创建实例代码
2016/07/08 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
详解js的事件代理(委托)
2016/12/22 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
python下paramiko模块实现ssh连接登录Linux服务器
2015/06/03 Python
Python字符串特性及常用字符串方法的简单笔记
2016/01/04 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
python代码能做成软件吗
2020/07/24 Python
如何编写python的daemon程序
2021/01/07 Python
python 多线程爬取壁纸网站的示例
2021/02/20 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
html5使用canvas画三角形
2014/12/15 HTML / CSS
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
事业单位辞职信范文
2014/01/19 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
服务口号大全
2014/06/11 职场文书
大学同学会活动方案
2014/08/20 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
详解Python自动化之文件自动化处理
2021/06/21 Python