重写Ext中的typeOf函数来解决Ext JS中typeOf对字符串对象、元素节点、文本节点、空白文本节点判断并不准确的问题
重写的typeOf函数使用自己实现的TypeOf函数2中的代码
测试代码如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>Ext.typeOf</title>
<link rel="stylesheet" type="text/css" href="js/ext4/resources/css/ext-all.css">
<link rel="stylesheet" type="text/css" href="css/icon.css">
<!--<script type="text/javascript" src="js/ext4/bootstrap.js"></script>-->
<script type="text/javascript" src="js/ext4/ext-all-debug.js"></script> <script type="text/javascript" src="js/ext4/locale/ext-lang-zh_CN.js"></script>
<script type="text/javascript">
Ext.onReady(_pageLoaded); /**
* 页面加载完毕后执行的函数
* @private
*/
function _pageLoaded(){
Ext.override(Ext,{
/**
返回传入参数的类型
*/
typeOf:function (value){
//数据类型判断
var stringType = Object.prototype.toString.call(value);
switch(stringType){
case "[object Null]": return 'null';
case "[object Undefined]": return 'undefined';
case "[object String]": return 'string';
case "[object Number]": return 'number';
case "[object Boolean]": return 'boolean';
case "[object Function]": return 'function';
case "[object Date]": return 'date';
case "[object Array]": return 'array';
case "[object RegExp]": return 'regexp';
case "[object Object]": return 'object';
}
//节点类型判断(可扩展)
var nodeType = value.nodeType;
if(nodeType!='undefined'){
if(nodeType==1){//元素节点
return 'element';
}
if(nodeType==2){//属性节点
return 'attribute';
}
if(nodeType==3){//文本节点
if(/\S/.test(value.nodeValue)){//节点值包含非空白字符
return 'textnode';//非空白文本节点
}
return 'whitespace'//空白文本节点
}
}
//其它的统一识别为'object'
return typeof value;//'object'
} });
console.info(Ext.typeOf);
console.info(Ext.typeOf(new String('123')));
var _obj={nodeType:1};
console.info(Ext.typeOf(_obj)); var rfv;
Ext.isDefined(rfv);
}
</script>
</head>
<body>
<table id="table1">
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</table>
<span id="node1">测试文本~~~</span>
<span id="node2"> </span>
</body>
</html>