原型更新()不能在IE中工作

时间:2010-01-06 10:57:42

标签: internet-explorer prototype

标题显示我在所有IE版本中都有原型更新功能的问题,但它在FF和chrome中工作

这不起作用

var element = $('mainnav_h');
element.cleanWhitespace();
var html = element.firstChild.innerHTML;
html = html.gsub('<span class="sep"></span>', '');
element.firstChild.update(html);//this doesn't word

但这可行

var element = $('mainnav_h');
element.cleanWhitespace();
var html = element.firstChild.innerHTML;
html = html.gsub('<span class="sep"></span>', '');
element.firstChild.update("this works");

来源

<div class="innerNavigation_horizontal clear">
    <ul id="mainnav_h">
        <li><span class="sep"></span><a href="#" title="#">items</a></li>
    </ul></div>

当我将变量传递给update()函数时,你可以清楚地看到它在IE中不起作用,当我将字符串传递给它它在IE中工作时,可以解释一下这种荒谬的IE行为吗

萨勒曼

2 个答案:

答案 0 :(得分:0)

我的猜测是问题不在于update(),而在于上述功能之一适用于HTML。

您可以在脚本的每个阶段使用alert()进行html的测试输出吗?它首先包含任何内容吗?

#mainnav_h看起来像什么?你可以发布消息来源吗?

element.firstChild确实存在吗?你能用

查看吗?
alert(typeof element.firstChild);

您在IE中收到任何错误消息吗?

答案 1 :(得分:0)

在这种情况下,问题显然与HTML大小写/语法有关,但对于到达此处的其他Google员工,我建议禁用IE兼容模式。我可以通过执行:

轻松地在IE控制台(F12)中重新创建问题

文档模式IE7标准:

>> span = document.createElement("span");
[object] {
    nextSibling : ,
    onresizeend : null,
    onrowenter : null,
    aria-haspopup : "",
    childNodes : [object],
    ondragleave : null,
    oncut : null,
    clientHeight : 0,
    onbeforepaste : null,
    ondragover : null
    ...
} 
>> span.update() 
"Object doesn't support property or method 'update'"

文档模式IE9标准:

>> span = document.createElement("span"); 
[object] {
    nextSibling : ,
    onresizeend : null,
    onrowenter : null,
    aria-haspopup : "",
    childNodes : [object],
    ondragleave : null,
    oncut : null,
    clientHeight : 0,
    onbeforepaste : null,
    ondragover : null
    ...
} 
>> span.update()
[object] {
    nextSibling : ,
    onresizeend : null,
    onrowenter : null,
    aria-haspopup : "",
    childNodes : [object],
    ondragleave : null,
    oncut : null,
    clientHeight : 0,
    onbeforepaste : null,
    ondragover : null
    ...
}

当然,这只适用于在已加载原型框架的网站上运行控制台,例如: www.redmine.org。