- 论坛徽章:
- 0
|
我自己也比较喜欢JQUERY.很方便.不过ECSHOP的JS却与JQ冲突....找了很多方法...都感觉怪怪的.
后来无意发现ECSHOP官方模板堂的效果也是JQUERY的....于是看了下官方的解决方法.
然后根据这个方法.在网上也查到了其冲突的原因
分享给大家.
冲突的地方主要有2个.
第一个冲突呢是在transport.js文件中587-639行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) {
...
}
// Iterate through all of the keys in the object, ignoring the proto chain.
for (k in this) {
...
}
}
// Join all of the fragments together and return.
a.push('}');
return a.join('');
};
复制代码代码过长...截断...在587-639
冲突原因
这段代码用于格式化json,他重写了object的结构,
导致于js框架冲突。
冲突的原因是jquery给一个object增加了很多元素,
那么在Object.prototype.toJSONString = function ()
这个函数中 for (k in this) 语句中进行了无数次的循环,
导致网页很卡,并且在IE中会报错。
解决方法
根本的解决办法是不用transport.js中的json功能,
那么就要有一个相同的功能来代替它,
首先要把transport.js中的
去掉整个方法.
587-639行
Object.prototype.toJSONString = function
增加obj2str.js,文件在后面下载
由于实现json功能的函数有区别,所以要麻烦改掉原ecshop中各个地方用到的toJSONString()函数。
页面中使用了类似 ***.toJSONString()
替换为 obj2str(***)
例Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse, 'POST', 'JSON');
复制代码改Ajax.call('flow.php?step=add_to_cart', 'goods=' + obj2st(goods), addToCartResponse, 'POST', 'JSON');
复制代码第二个冲突
在文件golbal.js中
//封装getEelementById函数function $()
{
var elements = new Array();
for (var i = 0; i < arguments.length; i++) {
var element = arguments[i];
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
复制代码很显然.此方法与jquery 的 $()工厂冲突
把此方法改变换成
function getId()
{
var elements = new Array();
for (var i = 0; i < arguments.length; i++) {
var element = arguments;
if (typeof element == 'string')
element = document.getElementById(element);
if (arguments.length == 1)
return element;
elements.push(element);
}
return elements;
}
或者有jquery的页面不引用golbal.js
把所有用到$()方法改造即可...........
文章来源:phphubei |
|