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的获得各种控件Value的方法
Nov 19 Javascript
js与jQuery 获取父窗、子窗的iframe
Dec 20 Javascript
JS判断页面是否出现滚动条的方法
Jul 17 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
Aug 25 Javascript
使用JS和canvas实现gif动图的停止和播放代码
Sep 01 Javascript
原生JS进行前后端同构
Apr 22 Javascript
浅谈Webpack下多环境配置的思路
Jun 27 Javascript
学习React中ref的两个demo示例
Aug 14 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
微信小程序时间选择插件使用详解
Dec 28 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 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
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
php&mysql 日期操作小记
2012/02/27 PHP
PHP使用json_encode函数时不转义中文的解决方法
2014/11/12 PHP
浅谈PHP中try{}catch{}的使用方法
2016/12/09 PHP
PHP如何开启Opcache功能提升程序处理效率
2020/04/27 PHP
点击文章内容处弹出页面代码
2009/10/01 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
Jquery Ajax方法传值到action的方法
2014/05/11 Javascript
Javascript代码实现仿实例化类
2015/04/03 Javascript
JS实现网页顶部向下滑出的全国城市切换导航效果
2015/08/22 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
js实现网页图片延时加载 提升网页打开速度
2016/01/26 Javascript
原生JS仿QQ阅读点击展开、收起效果
2017/03/08 Javascript
js 事件的传播机制(实例讲解)
2017/07/20 Javascript
微信二次分享报错invalid signature问题及解决方法
2019/04/01 Javascript
JavaScript ECMA-262-3 深入解析(二):变量对象实例详解
2020/04/25 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
[32:47]完美世界DOTA2联赛 GXR vs IO 第二场 11.07
2020/11/09 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
python实现随机漫步算法
2018/08/27 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
详解python列表(list)的使用技巧及高级操作
2019/08/15 Python
Python 定义只读属性的实现方式
2020/03/05 Python
手把手教你从PyCharm安装到激活(最新激活码),亲测有效可激活至2089年
2020/11/25 Python
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
法国娇韵诗官方旗舰店:Clarins是来自法国的天然护肤品牌
2018/06/30 全球购物
工程师岗位职责
2013/11/08 职场文书
大学生简历的个人自我评价
2013/12/04 职场文书
初中家长评语和期望
2014/12/26 职场文书
描述鲁迅的名言整理,一生受用
2019/08/08 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书