jQuery appendto и append не работают в IE8?
Я столкнулся со странной проблемой с использованием функций jQuery append и appendTo. Я бегу через объект и создаю элементы на основе свойств объектов. В нескольких местах моей функции я прекрасно использую методы.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 );
}
});
},
2 ответа
Просто используйте.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);
Вместо добавления "о" в конечный пункт попробуйте это в своем коде. Я думаю, что это будет работать.
var o = $("<object/>").appendTo(destination);
и прокомментируйте эти строки
// Insert object into container:
if(destination)
o.appendTo(destination);