在IE9中,对象不支持属性或方法'append'。

7

这个脚本在火狐和谷歌浏览器上运行正常,但在我们网站的主流浏览器IE9上只能执行到一半。

我遇到的问题是它会抛出这个错误:

SCRIPT438: 对象不支持“append”属性或方法 calc_ajax.js, 第26行第21字符

在这一行:item.append(link);

我现在被卡住了,希望能得到帮助。

$(document).ready(function(){
$('.first a.btn').click(function(){
    $('.first a.active').removeClass('active');
    $(this).addClass('active');
    $('.second .title').addClass('active');

    var id = $(this).data('cat-id');

    var wrap = $('<div>');

    $.ajax({
        url:    script_url,
        type:   "post",
        data: {"cat": id},
        dataType: "json"
    }).success(function(result){
        if(result.status == "ok"){
            $.each(result.data, function(i, elem){
                item = $("<div class='body-area'>").append($("<img src='" + elem.image + "'>"));
                link = $("<a href='#results' class='btn'>");
                link.text(elem.name);
                link.data('subcat-id', elem.id);
                item.append(link);

                wrap.append(item);

            });
            $('.second .body').html(wrap).slideDown('fast');
        }
    });
});

$('.second a.btn').live('click', function(){
    $('.second .body-area.active').removeClass('active');
    $(this).parent().addClass('active');

    var sub_id = $(this).data('subcat-id');        

    $.ajax({
        url:    script_url,
        type:   "post",
        data: {"subcat": sub_id},
        dataType: "json"
    }).success(function(result){
        if(result.status == "ok"){
            $('.third .title').text(result.data.title);
            $('.third .body').html(result.data.body);
            $('.third').slideDown('fast'); 
        }
    });        
});

});


你没有声明 itemlink,所以它们是全局的,这可能会导致问题,IE非常特殊,但不确定是否是问题的原因... - elclanrs
有关如何执行此操作的更多信息,因为这段代码不是我编写的,而且我对js的了解非常少,很抱歉听起来像个笨蛋。 - JoeLee
@JoeLee 编写者应该询问这些问题。 - Lightness Races in Orbit
没错,但是我得去修复它,感谢 Sudhir 提供的代码片段,现在一切都正常了。 - JoeLee
3个回答

12

在使用本机函数document.body.append时,我在IE11上遇到了相同的错误。

您可以使用document.body.appendChild或插入来自MDN的polyfillnpm)。


11
window.item是Internet Explorer中的一个特殊方法,由于您粘贴的代码未声明局部变量item,因此它尝试重新分配IE中的本地方法。 IE不允许重新分配发生,因此您并没有真正获得在item变量中期望的jQuery对象,因此append方法不可用。
修复代码的最简单方法是在使用item变量之前添加一个var。这里有一个jsFiddle示例展示了如何在IE中解决此问题:http://jsfiddle.net/httyY/
$.ajax({
    url:    script_url,
    type:   "post",
    data: {"cat": id},
    dataType: "json"
}).success(function(result){
    if(result.status == "ok"){
        $.each(result.data, function(i, elem){
            var item = $("<div class='body-area'>").append($("<img src='" + elem.image + "'>"));
            var link = $("<a href='#results' class='btn'>");
            link.text(elem.name);
            link.data('subcat-id', elem.id);
            item.append(link);

            wrap.append(item);

        });
        $('.second .body').html(wrap).slideDown('fast');
    }
});

1
尝试:
$.each(result.data, function(i, elem){
   var item = $("<div class='body-area'>").append($("<img src='" + elem.image + "'>"));
   var link = $("<a />", {"href" :"#results", "class": "btn"});
   link.text(elem.name);
   link.data('subcat-id', elem.id);
   item.append(link);
   wrap.append(item);    
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接