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 相关文章推荐
JavaScript实现禁止后退的方法
Dec 27 Javascript
js arguments,jcallee caller用法总结
Nov 30 Javascript
jQuery实现为控件添加水印文字效果(附源码)
Dec 02 Javascript
jQuery中text() val()和html()的区别实例详解
Jun 28 Javascript
js监听input输入框值的实时变化实例
Jan 26 Javascript
BootStrap表单控件之复选框checkbox和单选择按钮radio
May 23 Javascript
js实现水平滚动菜单导航
Jul 21 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
Oct 25 Javascript
JS实现为动态创建的元素添加事件操作示例
Mar 17 Javascript
JavaScript中发出HTTP请求最常用的方法
Jul 12 Javascript
Node.js从字符串生成文件流的实现方法
Aug 18 Javascript
tweenjs缓动算法的使用实例分析
Aug 26 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单例模式应用详解
2013/06/03 PHP
php调用mysql存储过程实例分析
2014/12/29 PHP
PHP获取毫秒级时间戳的方法
2015/04/15 PHP
10款PHP开源商城系统汇总介绍
2015/07/23 PHP
php ci 获取表单中多个同名input元素值的代码
2016/03/25 PHP
javascript 日历提醒系统( 兼容所有浏览器 )
2009/04/07 Javascript
javascript 一些用法小结
2009/09/11 Javascript
JavaScript 一行代码,轻松搞定浮动快捷留言-V2升级版
2010/04/02 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
2016/09/14 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
javascript简写常用的12个技巧(可以大大减少你的js代码量)
2020/03/28 Javascript
使用Vue.js开发微信小程序开源框架mpvue解析
2018/03/20 Javascript
Vue项目引发的「过滤器」使用教程
2019/03/12 Javascript
vue+element使用动态加载路由方式实现三级菜单页面显示的操作
2020/08/04 Javascript
vue使用swiper实现左右滑动切换图片
2020/10/16 Javascript
[18:20]DOTA2 HEROS教学视频教你分分钟做大人-昆卡
2014/06/11 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
浅谈django rest jwt vue 跨域问题
2018/10/26 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
简单了解python元组tuple相关原理
2019/12/02 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
仓库管理专业个人自我评价范文
2013/11/11 职场文书
委托证明的格式
2014/01/10 职场文书
学术会议邀请函范文
2014/01/22 职场文书
《槐乡五月》教学反思
2014/04/25 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
工作失误检讨书
2015/01/26 职场文书
2015年学校工作总结范文
2015/04/20 职场文书
学生会宣传部竞选稿
2015/11/21 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
详解Vue slot插槽
2021/11/20 Vue.js