刚刚在项目中解决了jQuery中的函数变量$冲突问题。在使用jQuery的下拉菜单应用到实际项目中,又碰到了jQuery.js与json.js不兼容的情况。
主要原因是:
jquery给object增加了很多元素,那么在json.jar大概99行的位置
在Object.prototype.toJSONString = function ()方法中。
for (i in this) {
if(this.hasOwnProperty(i)){
报:对象不支持此属性或方法。
目前的麻烦点是:系统是一个老项目。新增的一个页面增加了JS库jQuery.js。最好的方式是不采用jQuery,重写新增功能的下拉菜单。但是时间比较紧急,而json.jar却是一个基础JS。json.jar是不能删除的。又没时间重写下拉菜单的实现。采用了一种折中的方式处理此问题。暂时解决了js库的冲突。增加异常判断。忽略异常。
修改json.jar中的Object.prototype.toJSONString方法如下:
Object.prototype.toJSONString = function () {
var a = ['{'], b, i, v;
function p(s) {
if (b) {
a.push(',');
}
a.push(i.toJSONString(), ':', s);
b = true;
}
for (i in this) {
var b=false;
try{
b=this.hasOwnProperty(i);
}catch{
b=false;
}
if (b) {
v = this[i];
switch (typeof v) {
case 'undefined':
case 'function':
case 'unknown':
break;
case 'object':
if (v) {
if (typeof v.toJSONString === 'function') {
p(v.toJSONString());
}
} else {
p("null");
}
break;
default:
p(v.toJSONString());
}
}
}
a.push('}');
return a.join('');
};
教训: 在不是很了解新的js库之前,不要冒然使用。尤其是在老的项目中使用。另外:
再好不要采用prototype.js+json.js+jQuery.js组合的JS库。兼容问题很多。