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拖拽并简单保存的实现代码
Nov 28 Javascript
ECMAScript 创建自己的js类库
Nov 22 Javascript
javascript创建数组之联合数组的使用方法示例
Dec 26 Javascript
jquery获取html元素的绝对位置和相对位置的方法
Jun 20 Javascript
js实现获取当前时间是本月第几周的方法
Aug 11 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 Javascript
JavaScript函数表达式详解及实例
May 05 Javascript
js实现放大镜特效
May 18 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
Sep 05 Javascript
JavaScript设计模式之单例模式简单实例教程
Jul 02 Javascript
中高级前端必须了解的JS中的内存管理(推荐)
Jul 04 Javascript
详细分析vue响应式原理
Jun 22 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
windows7下php开发环境搭建图文教程
2015/01/06 PHP
浅析iis7.5安装配置php环境
2015/05/10 PHP
PHP互换两个变量值的方法(不用第三变量)
2016/11/14 PHP
PHP实现计算器小功能
2020/08/28 PHP
javascript+iframe 实现无刷新载入整页的代码
2010/03/17 Javascript
基于jquery实现的文字淡入淡出效果
2013/11/14 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
原生javascript实现图片按钮切换
2015/01/12 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
AngularJS Toaster使用详解
2017/02/24 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
vue实现鼠标移过出现下拉二级菜单功能
2019/12/12 Javascript
解决nuxt页面中mounted、created、watch执行两遍的问题
2020/11/05 Javascript
linux服务器快速卸载安装node环境(简单上手)
2021/02/22 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
python批量提取word内信息
2015/08/09 Python
Python实现可自定义大小的截屏功能
2018/01/20 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Python3+selenium实现cookie免密登录的示例代码
2020/03/18 Python
实例教程 一款纯css3实现的数字统计游戏
2014/11/10 HTML / CSS
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
岗位竞聘演讲稿
2014/01/10 职场文书
开会迟到检讨书
2014/02/03 职场文书
学校春季防火方案
2014/06/08 职场文书
感恩教育月活动总结
2014/07/07 职场文书
党的群众路线教育实践活动个人自我剖析材料
2014/10/07 职场文书
党员干部作风建设思想汇报范文
2014/10/25 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
在职证明范本
2015/06/15 职场文书
商业计划书范文
2019/04/24 职场文书
python 管理系统实现mysql交互的示例代码
2021/12/06 Python