Prototype.js Element.update()在IE9上抛出错误

时间:2011-10-21 22:22:39

标签: internet-explorer html-table prototypejs tablerow

我的代码如下:

var node = parent.insertRow(before);
node = $(node);
node.update('<td>Hello</td><td>Hello</td><td>Hello</td>');

适用于IE6,IE7,IE8,Chrome,Firefox,Safari(包括Mac和Windows),但不适用于IE9。

IE9抛出“DOM异常:INVALID_CHARACTER_ERR(5)”并指向prototype.js中间的e.setAttribute(c,f)。我使用了监视窗口,显示c为“{}”,这对我没有任何意义。

我正在使用Scriptaculous 1.9.0,其中包括Prototype 1.7,所有研究都显示为IE9兼容。

我知道IE对表有特殊要求,这就是我使用的原因 a Element#update

我做错了什么?

1 个答案:

答案 0 :(得分:0)

如果将方法添加到Object.prototype,则可能需要使用defineProperty将它们设置为不可数,以使Element#update能够在IE9上运行。当代码修改Object.prototype时,元素#update很脆弱。

就我而言,图书馆做了类似的事情:

Object.prototype.aFunc = function () {
    return doStuff();
};

我特意使用IE9来修复它:

if (navigator.userAgent.indexOf("Trident/5") > -1) {
   Object.defineProperty(Object.prototype, 'aFunc', {
      value : function () {
         return doStuff();
      },
      enumerable : false
   });
} else {
    Object.prototype.aFunc = function () {
        return doStuff();
    };
}