`
yiminghe
  • 浏览: 1460432 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Extjs 正则表达式的优雅应用 -1

阅读更多

在 extjs 的基础库中,大量使用了正则表达式的功能,使得原来很复杂的逻辑可以用很短的代码表示出了。

 

举个例子:

 

要动态获得 元素的 width,height,top,left 等位置大小属性:

 

首先一点预备知识:

 

extjs 是以像素为基本单元,以像素控制的话各个浏览器也比较容易控制,于是extjs 获得上述属性得到的都是像素为单位的数值。


动态获取元素上述大小属性,首先如果css上用户设置了内联,那么ie,ff可以直接style读取,否则就要利用ff的符合标准的computedStyle 以及 ie 特有的 currentStyle 。


如 extjs 的 getStyle 函数 :

 

/**
         * Normalizes currentStyle and computedStyle.
         * @param {String} property The style property whose value is returned.
         * @return {String} The current value of the style property for this element.
         */
        getStyle : function(){         
            return view && view.getComputedStyle ?
                function(prop){
                    var el = this.dom,
                        v,                  
                        cs;
                    if(el == document) return null;
                    prop = chkCache(prop);
                    return (v = el.style[prop]) ? v : 
                           (cs = view.getComputedStyle(el, "")) ? cs[prop] : null;
                } :
                function(prop){      
                    var el = this.dom, 
                        m, 
                        cs;     
                        
                    if(el == document) return null;      
                    if (prop == 'opacity') {
                        if (el.style.filter.match) {                       
                            if(m = el.style.filter.match(opacityRe)){
                                var fv = parseFloat(m[1]);
                                if(!isNaN(fv)){
                                    return fv ? fv / 100 : 0;
                                }
                            }
                        }
                        return 1;
                    }
                    prop = chkCache(prop);  
                    return el.style[prop] || ((cs = el.currentStyle) ? cs[prop] : null);
                };
        }(),
 


但是注意:


1. 如果 用户没有显示指明 css ,则 ie 会得到 "auto" ,ff 则可以得到现场自己根据内容计算的 css 值,为以像素为单元,如 "20px"


2. ff 无论用户css属性设置了哪种单元,如pt,em ,一律返回 px单元的数值 ,如 “20px” ,但是 ie 如果用户没有设置px单元 则会 返回 非px单元表示的数值,如 "12pt"


由于 extjs 一定要以 px 为单元的数值返回,则这时 ie 的 getstyle 不能采纳,但是可以采纳 offset 属性,由于 offset 返回的是动态的以px为单元的数值,则可以用 offset 近似表示 width ,height ,区别有需要注意

(见:

offsetXx 探讨

)。



3. top left 只有在 定位时才有意义,其他情况下返回0,即可。


根据上述逻辑可以得到复杂的代码获取控制逻辑,但是看一看extjs的

 

offsetAttribute = /^((width|height)|(top|left))$/,
offsetUnit =  /\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i,

getAttr: function(attr) {
            var el = Ext.fly(this.el),
                val = el.getStyle(attr),
                a = offsetAttribute.exec(attr) || []

            if (val !== 'auto' && !offsetUnit.test(val)) {
                return parseFloat(val);
            }

            return (

//attr 为 width 或 height
!!(a[2]) || 
(el.getStyle('position') == 'absolute' && 

//如果 attr 为 top 或 left ,则元素必须绝对定位
!!(a[3]))) ?

//ie 下取offset得到像素单元的数值 ,注意 a[0]==a[1] 都当前匹配项

//如:/^((width|height)|(top|left))$/.exec("width") == ["width", "width", "width", undefined]
 el.dom['offset' + a[0].charAt(0).toUpperCase() + a[0].substr(1)] : 0;
        },
 

利用正则表达式来代替跳转判断逻辑,很巧妙。

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Extjs 提示和正则表达式

    下面我们将深入探讨正则表达式的基本概念以及在ExtJS中的应用。 一、正则表达式基础 1. **基本元素**:正则表达式由一些基本字符构成,如`.`匹配任意字符,`^`表示行的开始,`$`表示行的结束,`*`表示前面的字符...

    ExtJS正则表达式使用说明

    在ExtJS中应用正则表达式时,需要特别注意:属性regex后应使用`/^正则表达式$/`的格式来确保正则表达式能够正确执行。这相当于为正则表达式界定明确的开始和结束,否则可能会出现错误提示“缺少对象”。这一做法有助...

    ExtJs 正则表达式小结

    使用extJs时能常用的正则表达式 “^\d+$” //非负整数(正整数 + 0) “^[0-9]*[1-9][0-9]*$” //正整数 “^((-\d+)|(0+))$” //非正整数(负整数 + 0) “^-[0-9]*[1-9][0-9]*$” //负整数 “^-?\d+$” //整数...

    Ext 常用正则表达式总结

    ExtJS,一个流行的JavaScript库,广泛应用于构建富客户端应用程序,同样利用正则表达式来验证用户输入的数据。下面是对ExtJS中常用正则表达式的详细解释和应用场景。 1. **非负整数**: `"^\d+$"` - 这个正则...

    验证的正则表达式,开发提供参考

    在软件开发过程中,正则表达式被广泛应用于数据验证、文本解析等多个方面。 #### 二、常见正则表达式实例分析 ##### 1. 验证纯数字 - **纯数字(任意长度)**:`^[0-9]*$` - **解释**:该表达式用于匹配任何由...

    Extjs6.2 生成的admin-dashboard官方模板

    Extjs6.2 生成的admin-dashboard官方模板

    Extjs 6.2 最新sdk ext-6.2.0-gpl.zip

    官方最新版本Extjs6.2版本sdk,创建新项目的时候需要用, 全面的核心框架,具有最新的Javascript标准支持 新的漂亮组件和主题,以创建漂亮的企业应用程序 现代工具链,用于构建优化,高性能,通用的应用程序 用于可视...

    extjs-theme-bootstrap-master.zip

    总之,"extjs-theme-bootstrap-master.zip"为开发者提供了一种方式,让他们能够将流行的Bootstrap样式应用于ExtJS应用中,从而获得美观且功能丰富的Web界面。这个主题包不仅包含了样式定义,还可能包括示例、文档和...

    extjs2----关于extjs 的使用,操作

    ExtJS 是一个强大的JavaScript库,专门用于构建富客户端Web应用程序。在标题"extjs2----关于extjs 的使用,操作"中,我们可以看出这是一份关于ExtJS 2.0版本的使用指南,主要涵盖了其基本操作和应用。描述中提到内容...

    extjs-OA extjs-oa

    一个extjs的OA项目 extjs-OA extjs-oaextjs-OA extjs-oa

    extjs-3.0-all-src

    这个"extjs-3.0-all-src"文件是ExtJS 3.0的完整源代码包,对于开发者来说,深入理解其内部机制和进行自定义扩展非常有价值。让我们详细探讨一下这个框架及其相关知识点。 1. **ExtJS框架概述**: ExtJS 是由Sencha...

    extjs实例--------嗖嗖嗖

    ExtJS 是一个流行的JavaScript库,主要用于构建富客户端的Web应用程序。这个实例——"嗖嗖嗖",似乎是一个基于ExtJS的项目,但具体的功能或用途并未在标题和描述中明确指出。不过,我们可以根据提供的文件名来推测...

    extJs例子-------

    ext基本的控件例子ext基本的控件例子ext基本的控件例子ext基本的控件例子

    extjs oracle分页---Json转换

    标题“ExtJS Oracle分页---Json转换”涉及的是在Web应用程序开发中,使用ExtJS框架与Oracle数据库进行分页数据交互,并通过Json格式进行数据转换的技术。以下是对这个主题的详细解释: ExtJS是一个强大的JavaScript...

    ExtJS 4.2 component - Field-Money

    ExtJS 4.2 component - Field-Money

    深入浅出ExtJS随书源码--EXTJS2.0

    1. **组件系统**:ExtJS的核心是其组件模型,其中包括各种可重用的UI组件,如表格、面板、窗口、菜单等。在源码中,你可以看到这些组件的定义和实现,理解它们如何组合成复杂的用户界面。 2. **布局管理**:ExtJS的...

    ExtJS in Action ch1-ch6

    ExtJS in Action ch1-ch6

Global site tag (gtag.js) - Google Analytics