jQuery appendto и append не функционират в IE8?

Срещам странен проблем, използвайки функцията append и appendTo на jQuery. Преминавам през обект и създавам елементи въз основа на свойствата на обектите. На няколко места в моята функция използвам методите .append() и .appendTo() напълно добре. В IE8 и IE7 обаче получавам странна грешка. Грешката изчезва, когато коментирам реда: o.append(em)

Някакви идеи?

embedWindowsMedia: function(url, destination, opt){

        // Default MediaPlayer options:
        var d = {
                id: 'mediaPlayer',
                width: '320',
                height: '285',
                classid:'CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95',
                codebase: 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
                standby: 'Loading Microsoft Windows Media Player components...',
                type: 'application/x-oleobject',
                params: { fileName : '',
                        animationatStart : 'true',
                        transparentatStart : 'true',
                        autoStart : 'false',
                        showControls : 'false',
                        loop : 'true',
                        windowlessVideo: 'true'
                },
                embed: {
                    type: 'application/x-mplayer2',
                    pluginspage: 'http://microsoft.com/windows/mediaplayer/en/download/',
                    id: 'mediaPlayer',
                    name: 'mediaPlayer',
                    displaysize: '4',
                    autosize:'-1',
                    bgcolor:'darkblue',
                    showdisplay: '0',
                    showstatusbar:'-1',
                    videoborder3d:'-1',
                    width: '320',
                    height: '285',
                    src: '',
                    autostart:'',
                    loop :'false'
                }
        };
        // Handle overwriting default options:
        if (!url)
            return false;
        else{

            d.params.fileName = url;
            d.embed.src = url;
        }

        alert("urls set");
        if (opt.embed){
            d.embed = $.extend(d.embed, opt.embed)
            delete opt.embed;
        }
        if (opt.params){
            d.params = $.extend(d.params, opt.params)
            delete opt.params;
        }       
        var n = $.extend(d,opt);
        // Create object with options and all:
        var o = $("<object/>");
        for (var k in n){
            if (typeof n[k] == 'string'){
                o.attr(k,n[k]);
            }
            else if(typeof n[k] == 'object'){
                if (k=='params'){
                    for( var p in n[k]){
                        var param = $('<param/>');
                        param.attr('name', p).attr('value', n[k][p]).appendTo(o);
                    }
                }
                else if (k=='embed'){
                    var em = $('<embed/>');
                    for( var e in n[k]){
                        em.attr(e, n[k][e]);
                    }
                    o.append(em);
                }
            }
        }
        // Insert object into container:        
        if(destination)
            o.appendTo(destination);
    }

Получаване на същата точна грешка и със следния код:

embedWindowsMedia: function(url, destination, opt){

    // Default MediaPlayer options:
    var d = {
            id: 'mediaPlayer',
            width: '320',
            height: '285',
            classid:'CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95',
            codebase: 'http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701',
            standby: 'Loading Microsoft Windows Media Player components...',
            type: 'application/x-oleobject',
            params: { fileName : '',
                    animationatStart : 'true',
                    transparentatStart : 'true',
                    autoStart : 'false',
                    showControls : 'false',
                    loop : 'true',
                    windowlessVideo: 'true'
            },
            embed: {
                type: 'application/x-mplayer2',
                pluginspage: 'http://microsoft.com/windows/mediaplayer/en/download/',
                id: 'mediaPlayer',
                name: 'mediaPlayer',
                displaysize: '4',
                autosize:'-1',
                bgcolor:'darkblue',
                showdisplay: '0',
                showstatusbar:'-1',
                videoborder3d:'-1',
                width: '320',
                height: '285',
                src: '',
                autostart:'',
                loop :'false'
            }
    };
    // Handle overwriting default options:
    if (!url)
        return false;
    else{

        d.params.fileName = url;
        d.embed.src = url;
    }

    alert("urls set");
    if (opt.embed){
        d.embed = $.extend(d.embed, opt.embed)
        delete opt.embed;
    }
    if (opt.params){
        d.params = $.extend(d.params, opt.params)
        delete opt.params;
    }       
    var n = $.extend(d,opt);
    // Create object with options and all:
    var o = $("<object/>").appendTo(destination);
    for (var k in n){
        if (typeof n[k] == 'string'){
            o.attr(k,n[k]);
        }
        else if(typeof n[k] == 'object'){
            if (k=='params'){
                for( var p in n[k]){
                    var param = $('<param/>');
                    param.attr('name', p).attr('value', n[k][p]).appendTo(o);
                }
            }
            else if (k=='embed'){
                //var em = $('<embed/>');
                var em = "<embed ";
                for( var e in n[k]){
                    em += e+'="'+n[k][e]+'" ';
                    //em.attr(e, n[k][e]);
                }
                em+= "></embed>";
                //$("#mediaPlayer").append(em);
            }
        }
    }
    console.log(em);
    $("#mediaPlayer").html(em);

}

Тук възниква грешка в jquery (this.appendChild(elem);)

append: function() {
    return this.domManip(arguments, true, function( elem ) {
        if ( this.nodeType === 1 ) {
            this.appendChild( elem );
        }
    });
},

person Paul    schedule 29.07.2011    source източник
comment
Каква е грешката, която виждате?   -  person ShankarSangoli    schedule 29.07.2011
comment
опитахте ли да замените var em = $('<embed/>') с var em = $('<embed></embed>');?   -  person arviman    schedule 29.07.2011
comment
Опитах и ​​това. Не върви. Грешката, която получавам е: Невалиден аргумент. jquery-1.6.2.min.js, ред 17 знак 29094   -  person Paul    schedule 29.07.2011
comment
Коментирането на реда: em.appendTo(o); прави всичко по-добро   -  person Paul    schedule 29.07.2011
comment
Предполагам, че това има нещо общо с това: stackoverflow.com/questions/2657697/   -  person Paul    schedule 29.07.2011


Отговори (2)


Вместо да добавяте "o" към местоназначението в края, опитайте това в кода си. Мисля, че това ще свърши работа.

var o = $("<object/>").appendTo(destination);

и коментирайте тези редове

// Insert object into container:        
        if(destination)
            o.appendTo(destination);
person ShankarSangoli    schedule 29.07.2011
comment
Все още няма зарове... Това ме подлудява. - person Paul; 29.07.2011

Просто използвайте функцията .html() на jquery. За попълване на <ul id="List"></ul>, например:

var ListItems = $("#List");
    ListItems.html('');
var liString = "";
//.forEach may not work in IE8, so use "for"
for (var i= 0; i<SubjectsArray.length; i++)
{
    var entry = SubjectsArray[i];
    liString += "<li>"+entry+"</li>";
};
ListItems.html(liString);
person Alexander Kazantsev    schedule 15.10.2014