QQ 1640076782

2009年11月6日

外贸网店之ECSHOP-transport和jquery冲突之完美解决方案

Filed under: 猪哥 — 标签: — past @ 1:24 下午

现在外贸网店很多都用到了Jquery,有些外贸客户问JavaScript和Jquery有什么不同.

JavaScript 为设计拓宽了视野,而 jQuery 让这一切变得更简单。对那些通晓 CSS 的设计师来说,编写 jQuery 代码很类似,而对于那些拥有 Flash 经验的设计师来说,jQuery 是一种标准化的,开放的技术,它可以实现类似 Flash 的交互效果.( jQuery像毒品,用上了就很难戒掉。)

不扯了给大家说下我是这么解决在ECSHOP中transport.js和Jquery两者之间的冲突的.

众所周知:ecshop的transport.js文件和Jquery是冲突的,两个文件不能同时调用,现给出以下完美解决方案:

在transport.js文件中,大概 579行到634行之间,这个句用于格式化json,他重写了 object的结构,导致于js框架冲突。冲突的原因是jquery给一个object增加了很多元素,那么在 Object.prototype.toJSONString = function () 这个函数中 for (k in this) 语句中进行了无数次的循环,导致网页很卡,并且在IE中会报错。

把579~634之间的代码修改为

Object.prototype.toJSONString = function () {
var a = ['{'],  // The array holding the text fragments.
b,          // A boolean indicating that a comma is required.
k,          // The current key.
v;          // The current value.

function p(s) {

// p accumulates text fragment pairs in an array. It inserts a comma before all
// except the first fragment pair.

if (b) {
a.push(‘,’);
}
a.push(k.toJSONString(), ‘:’, s);
b = true;
}

// Iterate through all of the keys in the object, ignoring the proto chain.

for (k in this) {
if (this.hasOwnProperty(k)) {
v = this[k];
switch (typeof v) {

// Values without a JSON representation are ignored.

case ‘undefined’:
case ‘function’:
case ‘unknown’:
break;

// Serialize a JavaScript object value. Ignore objects that lack the
// toJSONString method. Due to a specification error in ECMAScript,
// typeof null is ‘object’, so watch out for that case.

case ‘object’:
if (v) {
if (typeof v.toJSONString === ‘function’) {
p(v.toJSONString());
}
} else {
p(“null”);
}
break;
default:
p(v.toJSONString());
}
}
}

// Join all of the fragments together and return.

a.push(‘}’);
return a.join(”);
};