重写Ext中的typeOf函数来解决Ext JS中typeOf对字符串对象、元素节点、文本节点、空白文本节点判断并不准确的问题

重写的typeOf函数使用自己实现的TypeOf函数2中的代码

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

测试代码如下:

 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
 2         "http://www.w3.org/TR/html4/loose.dtd">
 3 <html>
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>Ext.typeOf</title>
 7     <link rel="stylesheet" type="text/css" href="js/ext4/resources/css/ext-all.css">
 8     <link rel="stylesheet" type="text/css" href="css/icon.css">
 9     <!--<script type="text/javascript" src="js/ext4/bootstrap.js"></script>-->
10     <script type="text/javascript" src="js/ext4/ext-all-debug.js"></script>
11 
12     <script type="text/javascript" src="js/ext4/locale/ext-lang-zh_CN.js"></script>
13     <script type="text/javascript">
14         Ext.onReady(_pageLoaded);
15 
16         /**
17          * 页面加载完毕后执行的函数
18          * @private
19          */
20         function _pageLoaded(){
21           Ext.override(Ext,{
22               /**
23                返回传入参数的类型
24                */
25               typeOf:function (value){
26                 //数据类型判断
27                 var stringType = Object.prototype.toString.call(value);
28                 switch(stringType){
29                     case "[object Null]":      return 'null';
30                     case "[object Undefined]": return 'undefined';
31                     case "[object String]":    return 'string';
32                     case "[object Number]":    return 'number';
33                     case "[object Boolean]":   return 'boolean';
34                     case "[object Function]":  return 'function';
35                     case "[object Date]":      return 'date';
36                     case "[object Array]":     return 'array';
37                     case "[object RegExp]":    return 'regexp';
38                     case "[object Object]":    return 'object';
39                 }
40                 //节点类型判断(可扩展)
41                 var nodeType = value.nodeType;
42                 if(nodeType!='undefined'){
43                     if(nodeType==1){//元素节点
44                         return 'element';
45                     }
46                     if(nodeType==2){//属性节点
47                         return 'attribute';
48                     }
49                     if(nodeType==3){//文本节点
50                         if(/\S/.test(value.nodeValue)){//节点值包含非空白字符
51                             return 'textnode';//非空白文本节点
52                         }
53                         return 'whitespace'//空白文本节点
54                     }
55                 }
56                 //其它的统一识别为'object'
57                 return typeof value;//'object'
58             }
59 
60         });
61         console.info(Ext.typeOf);
62         console.info(Ext.typeOf(new String('123')));
63         var _obj={nodeType:1};
64         console.info(Ext.typeOf(_obj));
65 
66         var rfv;
67         Ext.isDefined(rfv);
68         }
69     </script>
70 </head>
71 <body>
72 <table id="table1">
73     <tr>
74         <td>1</td>
75         <td>2</td>
76     </tr>
77     <tr>
78         <td>3</td>
79         <td>4</td>
80     </tr>
81 </table>
82 <span id="node1">测试文本~~~</span>
83 <span id="node2">  </span>
84 </body>
85 </html>

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄