Javascript 对象没有';t支持属性或方法';追加';在IE9中

Javascript 对象没有';t支持属性或方法';追加';在IE9中,javascript,jquery,internet-explorer-9,Javascript,Jquery,Internet Explorer 9,这个脚本在firefox或chrome上运行,但在IE9上只运行了一半,IE9是我们网站的顶级浏览器 我遇到的问题是它抛出了这个错误 SCRIPT438:对象不支持属性或方法“append” calc_ajax.js,第26行,字符21 此行:item.append(link) 我被卡住了。任何帮助都将不胜感激 $(document).ready(function(){ $('.first a.btn').click(function(){ $('.first a.active').re

这个脚本在firefox或chrome上运行,但在IE9上只运行了一半,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'); 
        }
    });        
});
$(文档).ready(函数(){
$('.first a.btn')。单击(函数(){
$('.first a.active').removeClass('active');
$(this.addClass('active');
$('.second.title').addClass('active');
var id=$(this).data('cat-id');
var wrap=$('');
$.ajax({
url:script_url,
类型:“post”,
数据:{“cat”:id},
数据类型:“json”
}).成功(功能(结果){
如果(result.status==“ok”){
$.each(result.data,function(i,elem){
项目=$(“”)。追加($(“”);
链接=$(“”);
链接文本(元素名称);
链接数据(“子类别id”,元素id);
项目.附加(链接);
包装。附加(项目);
});
$('.second.body').html(wrap.slideDown('fast');
}
});
});
$('.second a.btn').live('单击',函数()){
$('.second.body-area.active').removeClass('active');
$(this.parent().addClass('active');
var sub_id=$(this).data('subcat-id');
$.ajax({
url:script_url,
类型:“post”,
数据:{“subcat”:sub_id},
数据类型:“json”
}).成功(功能(结果){
如果(result.status==“ok”){
$('.third.title').text(result.data.title);
$('.third.body').html(result.data.body);
$('.third')。向下滑动('fast');
}
});        
});
}))

试试看:

$.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);    
});
$。每个(结果、数据、函数(i、元素){
变量项=$(“”)。追加($(“”);
var link=$(“”,{“href”:“结果”,“类”:“btn”});
链接文本(元素名称);
链接数据(“子类别id”,元素id);
项目.附加(链接);
包装。附加(项目);
});

窗口。item
是Internet Explorer中的一种特殊方法,由于粘贴的代码没有声明局部变量
item
,因此它试图在IE中重新分配本机方法。IE不允许重新分配,因此您没有真正获得
item
变量中预期的jQuery对象因此,
append
方法不可用

修复代码的最简单方法是在使用
变量之前添加
var
。我创建了一个JSFIDLE,展示了它是如何解决IE中的问题的

$.ajax({
url:script_url,
类型:“post”,
数据:{“cat”:id},
数据类型:“json”
}).成功(功能(结果){
如果(result.status==“ok”){
$.each(result.data,function(i,elem){
变量项=$(“”)。追加($(“”);
变量链接=$(“”);
链接文本(元素名称);
链接数据(“子类别id”,元素id);
项目.附加(链接);
包装。附加(项目);
});
$('.second.body').html(wrap.slideDown('fast');
}
});

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


您可以使用
document.body.appendChild
或插入()。

您没有声明
链接
,因此它们是全局的,可能会导致问题,即非常特殊,但不确定这是否是问题所在……更多关于如何做的信息,因为这段代码不是我写的,而且我对js的了解很少。不幸的是,很抱歉听起来像个傻瓜。@JoeLee写这篇文章的人应该问这些问题,但我是必须解决它的人,但多亏了sudhir的代码,现在一切都正常了
$.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');
    }
});