error: function( msg ) {//声明错误
throw msg;
},
parsejson: function( data ) {//把字符串转换成json格式
if ( typeof data !== string || !data ) {//首先判断是否存在,是否为字符串
return null;
}
data = jquery.trim( data );//去掉前后空白
if ( window.json && window.json.parse ) {//高级版本有原生json转换函数window.json
return window.json.parse( data );
}
if ( rvalidchars.test( data.replace( rvalidescape, @ )//
.replace( rvalidtokens, ] )//
.replace( rvalidbraces, )) ) {//进行简单的检验,对{true:1},{a,{}}....都通过
//rvalidchars = /^[\],:{}\s]*$/,
//rvalidescape = /\\(?:[\\\/bfnrt]|u[0-9a-fa-f]{4})/g,u[0-9a-fa-f]{4}匹配中英文和转义符
//rvalidtokens = /[^\\\n\r]*|true|false|null|-?\d+(?:\.\d*)?(?:[ee][+\-]?\d+)?/g,//匹配字符串中不含有“\”、“”、“
”、布尔值、null、数字
//rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,匹配(开始为空或者:或者,)(后面跟随零或多个空格,最后跟随[) 如 [、: [、,[、, [等等
return (new function( return + data ))();
}
jquery.error( invalid json: + data );
},
parsexml: function( data , xml , tmp ) {不明白传入xml tmp用处
if ( window.domparser ) { // 标准
//domparser 对象解析 xml 文本并返回一个 xml document 对象。要使用 domparser,使用不带参数的构造函数来实例化它,然后调用其 //parsefromstring() 方法:
tmp = new domparser();
xml = tmp.parsefromstring( data , text/xml );
} else { // ie
xml = new activexobject( microsoft.xmldom );
xml.async = false;
xml.loadxml( data );
}
tmp = xml.documentelement;
if ( ! tmp || ! tmp.nodename || tmp.nodename === parsererror ) {//判断返回的结果是否为空,是否不是节点,是否报错
jquery.error( invalid xml: + data );
}
return xml;
}
globaleval: function( data ) {//把data变为可执行
if ( data && rnotwhite.test( data ) ) {//检查是否存在,是否不为空
( window.execscript || function( data ) {
window[ eval ].call( window, data );//window.eval.call(window,data)这种方式,在某些情况下ie下也不能改变上下环境所以只能针对ie使用window.execscript,其他流浪器使用window.eval.call(window,data);
} )( data );
}
},
nodename: function( elem, name ) {
return elem.nodename && elem.nodename.touppercase() === name.touppercase();//判断是否是节点,节点名默认是大写,为了保证能够正确判断,都转化成相同格式(大写)
},
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,//window,string,function,array类型的不为undefined;..
isobj = length === undefined || jquery.isfunction( object );//主要为了区分开对象和数组
if ( args ) {//如果没有传入参数,会用默认的名和值来作为参数,如果有参数,就使用传入的参数
if ( isobj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}
} else {//如果没有传入参数,
if ( isobj ) {
for ( name in object ) {// object[ name ]值作为当前对象,把名和值作为参数
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {//判断回调函数返回值,决定是否继续循环
break;
}
}
} else {
for ( ; i if ( callback.call( object[ i ], i, object[ i++ ] ) === false ) {//判断回调函数返回值,决定是否继续循环
break;
}
}
}
}
return object;
},
trim: trim ?//检测是否有原生trim方法,如果参数text !=就进行截取前后空白,否则返回空,没有原生trim的话,强制转换为字符串再进行正则替换,否则报错,使用正则替换(trimleft = /^\s+/,//匹配左空白,trimright = /\s+$/,//匹配右空白),
function( text ) {
return text == null ?
:
trim.call( text );
} :
function( text ) {
return text == null ?
:
text.tostring().replace( trimleft, ).replace( trimright, );
},