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 index()方法使用代码
Jun 02 Javascript
JQuery通过Ajax提交表单并返回结果
Jul 31 Javascript
Prototype源码浅析 Number部分
Jan 16 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
Jul 27 Javascript
javascript常见数据验证插件大全
Aug 03 Javascript
JavaScript原生对象常用方法总结(推荐)
May 13 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
May 27 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
Oct 23 Javascript
mpvue将vue项目转换为小程序
Sep 30 Javascript
Angular中使用ng-zorro图标库部分图标不能正常显示问题
Apr 22 Javascript
jQuery实现弹出层效果
Dec 10 jQuery
vue 使用 vue-pdf 实现pdf在线预览的示例代码
Apr 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作为网站开发语言的原因分享
2012/01/03 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
CI框架实现创建自定义类库的方法
2018/12/25 PHP
javascript插入样式实现代码
2012/02/22 Javascript
图片延迟加载的实现代码(模仿懒惰)
2013/03/29 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
判定是否原生方法的JS代码
2013/11/12 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
JavaScript实现表格点击排序的方法
2015/05/11 Javascript
js支持键盘控制的左右切换立体式图片轮播效果代码分享
2015/08/26 Javascript
js实现新年倒计时效果
2015/12/10 Javascript
JavaScript数组方法大全(推荐)
2016/07/05 Javascript
JavaScript html5利用FileReader实现上传功能
2020/03/27 Javascript
AngularJS页面传参的5种方式
2017/04/01 Javascript
MvcPager分页控件 适用于Bootstrap
2017/06/03 Javascript
解决使用vue.js路由后失效的问题
2018/03/17 Javascript
TypeScript中使用getElementXXX()的示例代码
2019/09/12 Javascript
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
2019/07/31 Python
Python多进程编程常用方法解析
2020/03/26 Python
Python如何使用队列方式实现多线程爬虫
2020/05/12 Python
Django ORM filter() 的运用详解
2020/05/14 Python
Python模块常用四种安装方式
2020/10/20 Python
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
人力资源管理专业毕业生自我评价
2013/09/21 职场文书
艺术应用与设计专业个人的自我评价
2013/11/19 职场文书
致800米运动员广播稿
2014/02/16 职场文书
授权委托书格式模板
2014/04/03 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
作风建设整改方案
2014/10/27 职场文书
学校食堂食品安全承诺书
2015/04/29 职场文书
撤诉申请书法院范本
2015/05/18 职场文书
趣味运动会口号
2015/12/24 职场文书
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python