2014-09-09 3 views
0

Я разрабатываю веб-сайт, который должен работать на IE8.ie8 appendchild не работает

Мне нужно создать кучу динамических абзацев, так как я вынимаю данные с сервера во время выполнения.

Для этого я использую следующий код:

var tempAbstract = layerItems[iter].abstract; // string 
var text1 = document.createElement('p');  // paragraph element 
text1.textContent = tempAbstract;    // assigning string to paragraph 
$(text1).css({top: iter*25 + 30, left: 200, position:'absolute'}); // positioning 
$(text1).css('color', 'black');        // make text color black 
document.getElementById("listLayersWrapper").appendChild(text1); // appending to div 

Моя проблема заключается в том, что текст не будет оказывать.

Когда я считаю абзац div s до и после того, как я добавляю элемент, счетчик увеличивается, как и следовало ожидать, пока текст не будет отображаться. Кроме того, когда я получаю звонок position().left и position.top(), элемент также имеет правильные координаты.

Я не уверен, что я делаю неправильно, и у меня закончились варианты.

+1

Поскольку вы используете JQuery, почему бы не сделать это с помощью JQuery? –

+0

не думал об этом ... Я просто знаю, что это работает на хроме по какой-то причине, но не в том, что я .... Я дам вам попытку –

+0

@ AlexanderO'Mara Я заменил document.get ... с помощью $ ("#listLayersWrapper") добавить (текст1). и еще не повезло –

ответ

1

Вопрос, как представляется, не с appendChild, но с textContent. Согласно the MDN page, textContent доступен только в IE9 и выше. У старых версий IE есть non-standard innerText property, которые вы можете использовать для достижения того же. Вот как вы можете это реализовать.

Пример:

var tempAbstract = layerItems[iter].abstract; 
var text1 = document.createElement('p'); 
if(text1.textContent !== undefined) 
{ 
    text1.textContent = tempAbstract; 
}else{ 
    text1.innerText = tempAbstract; 
} 
$(text1).css({top: iter*25 + 30, left: 200, position:'absolute'}); 
$(text1).css('color', 'black'); 
document.getElementById("listLayersWrapper").appendChild(text1); 

В качестве альтернативы, это может быть реализовано в JQuery.

Пример:

$('<p></p>') 
    .text(layerItems[iter].abstract) 
    .css({ 
     top: iter*25 + 30, 
     left: 200, 
     position:'absolute', 
     color: 'black' 
    }) 
    .appendTo("#listLayersWrapper"); 
+0

Спасибо! Я просто решил эту проблему, используя это: var text1 = $ ('

') .text (tempName); вместо того, что я имел раньше. Таким образом, похоже, что вы сказали, что работает, так как я не звоню в textContent, а также –

+0

плохо тестирует ваш код, даже несмотря на то, что мои работы и отметят его правильно, если он работает .. спасибо за отличный ответ, независимо от того, как –

+0

ваш второй ответ работал нормально. .. не проверил ваш первый –

Смежные вопросы