在IE 8中使用JQuerys html()方法设置innerHTML不起作用

时间:2011-12-15 16:20:02

标签: jquery internet-explorer-8 innerhtml

我有

$('#structure').html(html);

这在FireFox中运行良好。 IE 8不显示html。我也尝试过简单的文字,例如。

$('#structure').html("Test");

$('#structure').html("<h3>Test</h3>");

所有人都不能使用IE 8,但在Firefox中。所以我不认为这是无效的HTML的问题。

如果我用

替换它
document.write(html);

IE正确显示内容。

我迷路了。我也试过getElementById并设置innerHTML属性或.empty并追加。基本上我尝试过的所有功能都在FF中工作,在IE 8中没有任何功能。

代码在.change()事件中运行,该事件也在IE中正确执行。

任何想法?

编辑:

html由第三方商业插件返回。它返回用于显示ActiveX组件(IE)或插件(FF)的浏览器特定代码。返回的html有效。这不是我使用它的唯一地方。

也许你不能异步加载ActiveX?这可以解释一切。

$(document).ready(function() {

    $('#ID').change(function() {            
        var value = $(this).val();
        getStructure(value);
    });
});


function getStructure(id){          
    $.get(
        'getStructure.php?id=' + id,
        function(data){     
            // 3rd party function call:
            var html = getObjectTag(182, 172, data.Structure); // data["Structure"] does not work too in IE, it does in FF
            // alert(html); // is displayed also in IE when uncommented
            $('#structure').html(html); 
            // alert(html); // is displayed also in IE when uncommented             
    }, 
    "json"
    );          
}
<div class="cssform">
    <div><label>ID</label><input id="ID" type="text"/></div>
</div
<div id="structure"></div>

请注意,在我使用的另一个应用程序中:

var html = getObjectTag(182, 172, aData[0]);
$('td:eq(0)', nRow).html(html);

其中aData是调用函数的数组参数。这用于在jquery插件数据表中显示对象,这里对于IE 8和FF没有任何问题。

EDIT2:

进一步的“分析”让我相信无论出于何种原因,在IE中都找不到具有id =结构的div。

document.getElementById("structure").innerHTML = html;

导致错误“document.getElementById(...)”为null或不是对象。使用jquery选择器可能什么都不返回,因此没有进一步做任何事情并且没有错误发生。问题是,为什么找不到元素?对我毫无意义。

1 个答案:

答案 0 :(得分:0)

确定。找到了答案:

<div class="cssform">
    <div><label>ID</label><input id="ID" type="text"/></div>
</div <!-- Missing closing > which somehow was accepted by FF -->
<div id="structure"></div>